[erlang-questions] ei_send multithreaded problem

lang er <>
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.html>


More information about the erlang-questions mailing list