[erlang-questions] ei_send multithreaded problem
lang er
erlangist@REDACTED
Mon Feb 26 16:05:17 CET 2007
I'm writing a c node using ei layer. This program is running under Window
2003 enterprise edition sp1, and otp_win32_R11B-3. The following is a
fragment of my code:
--------------------------------------------------------------------
erlang_pid *pid = (erlang_pid *)pUser;
ei_x_buff xbuf;
ei_x_new_with_version(&xbuf);
ei_x_encode_tuple_header(&xbuf,2);
ei_x_encode_atom(&xbuf,"data");
ei_x_encode_binary(&xbuf, buffer, bufSize);
ei_send(acceptedFd, pid, xbuf.buff,xbuf.index);
ei_x_free(&xbuf);
----------------------------------------------------------------------
It is called inside a C callback function and may be called by many
concurrent threads. pUser include a erlang_pid (correspond to a process in
Erlang side).When some data come from network, a third party library
will invoke this callback function, so ei_send pass these data to a
corresponding Erlang process.(This process is an Erlang equivalent to a 3rd
library thread. So if I start one process in Erlang side, the 3rd library
will use one thread. If I start more than one process in Erlang , the 3rd
library will use same number of threads.)
Then, If I start one process in Erlang side, everything is OK. But If I
start more than one process, the C node program will crash after some random
time. If I comment out ei_send line in above code fragment, everything is
OK again.
Do I miss anything to use ei_send in multithreaded environment?
compiler: ms visual studio 2005
debug mode use ei_mdd.lib
Thanks,
James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20070226/686c7531/attachment.htm>
More information about the erlang-questions
mailing list