[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

 

  _____  

De: 
[mailto:] En nombre de lang er
Enviado el: Lunes, 26 de Febrero de 2007 01:05 p.m.
Para: 
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_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/8d72c50d/attachment.html>


More information about the erlang-questions mailing list