[erlang-questions] ei_send multithreaded problem

Eduardo Figoli (INS) <>
Mon Feb 26 16:46:32 CET 2007

Have you tried using a critical section whenever calling ei_send?


Regards, Eduardo



[mailto:] En nombre de lang er
Enviado el: Lunes, 26 de Febrero de 2007 01:05 p.m.
Asunto: [erlang-questions] ei_send multithreaded problem


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_encode_binary(&xbuf, buffer, bufSize);
 ei_send(acceptedFd, pid, xbuf.buff,xbuf.index);




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 







-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20070226/8d72c50d/attachment.html>

More information about the erlang-questions mailing list