<div>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial">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:
</span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial"> </span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial">--------------------------------------------------------------------</span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial"> erlang_pid *pid = (erlang_pid *)pUser;<br> ei_x_buff xbuf;<br> ei_x_new_with_version(&xbuf);<br> ei_x_encode_tuple_header(&xbuf,2);
<br> ei_x_encode_atom(&xbuf,"data");<br> ei_x_encode_binary(&xbuf, buffer, bufSize);<br> ei_send(acceptedFd, pid, xbuf.buff,xbuf.index);<br> ei_x_free(&xbuf);</span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial">----------------------------------------------------------------------</span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial"> </span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial"> </span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial">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.)
</span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial"> </span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial"> </span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial">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.
</span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial"> </span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial">Do I miss anything to use ei_send in multithreaded environment?</span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial"> </span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial">compiler: ms visual studio 2005</span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial">debug mode use  ei_mdd.lib </span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial"> </span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial"> </span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial"> </span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial">Thanks,</span></p>
<p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 0pt"><span style="FONT-FAMILY: Arial">James</span></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"> </font></p></div>