<html><body>
<p>Hi Bogdan,<br>
<br>
I believe I found the problem. When sip_msg_cloner() within build_cell() fails due to out-of-mem, and dangling pointer to the cell is left in the global transaction pointer. Later on the post_cb() code attempts to clean this up, and &quot;resurrects&quot; the now-free memory, and in particular puts it on a wait timer. My guess is that later on this memory is allocated into a new transaction which eventually uses the same wait timer link, and the two threads fight it out.<br>
<br>
Adding a set_t(0) fixes the problem. While looking, I believe I found a memory leak in uac creation code that is also triggered by out of memory conditions. Please see attached patch.<br>
<br>
The &quot;problem&quot; also manifest itself as a core dump with insert_timer_unsafe. Once I disabled optimization, I saw multiple variations within this function. The most common was that ptr==tl after the search.  The sequence of events for this is: new cell created, stored into global T, free'd, added to wait-list by cleanup code from global T, memory re-allocated into new cell, timer link zero'd, and then added again to wait list. At least that is my best guess.<br>
<br>
Regards,<br>
Kennard<br>
<br>
<i>(See attached file: opensips-tm-cell.patch)</i><br>
<br>
<img width="16" height="16" src="cid:2__=07BBFD57DFEB81D98f9e8a93df9@logitech.com" border="0" alt="Inactive hide details for Bogdan-Andrei Iancu ---10/22/2010 07:02:36 AM---Hi Kennard, I suppose the bt is the same ? do you sti"><font color="#424282">Bogdan-Andrei Iancu ---10/22/2010 07:02:36 AM---Hi Kennard, I suppose the bt is the same ? do you still have the core file ?</font><br>
<br>
<font size="2" color="#5F5F5F">From:        </font><font size="2">Bogdan-Andrei Iancu &lt;bogdan@voice-system.ro&gt;</font><br>
<font size="2" color="#5F5F5F">To:        </font><font size="2">OpenSIPS users mailling list &lt;users@lists.opensips.org&gt;</font><br>
<font size="2" color="#5F5F5F">Date:        </font><font size="2">10/22/2010 07:02 AM</font><br>
<font size="2" color="#5F5F5F">Subject:        </font><font size="2">Re: [OpenSIPS-Users] opensips tm timer core dump</font><br>
<font size="2" color="#5F5F5F">Sent by:        </font><font size="2">users-bounces@lists.opensips.org</font><br>
<hr width="100%" size="2" align="left" noshade style="color:#8091A5; "><br>
<br>
<br>
<tt>Hi Kennard,<br>
<br>
I suppose the bt is the same ? do you still have the core file ?<br>
<br>
Regards,<br>
Bogdan<br>
<br>
Kennard_White@logitech.com wrote:<br>
&gt;<br>
&gt; Hi Bodgen,<br>
&gt;<br>
&gt; I replicated the error. Unfortunately the entire insert_timer_unsafe <br>
&gt; and been in-lined and little is available:<br>
&gt;<br>
&gt; Program terminated with signal 11, Segmentation fault.<br>
&gt; #0 0x00007f8b8356c2c2 in insert_timer_unsafe (new_tl=0x7f8b7a54e310,<br>
&gt; list_id=WT_TIMER_LIST, ext_timeout=&lt;value optimized out&gt;) at timer.c:731<br>
&gt; 731 timer.c: No such file or directory.<br>
&gt; in timer.c<br>
&gt; (gdb) print tl<br>
&gt; $1 = &lt;value optimized out&gt;<br>
&gt; (gdb) print *tl<br>
&gt; Cannot access memory at address 0x0<br>
&gt; (gdb) print ptr<br>
&gt; $2 = &lt;value optimized out&gt;<br>
&gt; (gdb) print *ptr<br>
&gt; Cannot access memory at address 0x0<br>
&gt; (gdb) print *new_tl<br>
&gt; No symbol &quot;new_tl&quot; in current context.<br>
&gt; (gdb) up<br>
&gt; #1 set_1timer (new_tl=0x7f8b7a54e310, list_id=WT_TIMER_LIST,<br>
&gt; ext_timeout=&lt;value optimized out&gt;) at timer.c:904<br>
&gt; 904 in timer.c<br>
&gt; (gdb) print *new_tl<br>
&gt; $3 = {next_tl = 0x0, prev_tl = 0x0, ld_tl = 0x0, time_out = 0,<br>
&gt; timer_list = 0x0, deleted = 0}<br>
&gt; (gdb) print list<br>
&gt; $4 = &lt;value optimized out&gt;<br>
&gt; (gdb) print timeout<br>
&gt; $5 = 32<br>
&gt; (gdb) print new_tl<br>
&gt; $6 = (struct timer_link *) 0x7f8b7a54e310<br>
&gt;<br>
&gt; I'll keep the core for a while -- please let me know if there is <br>
&gt; anything else I can try.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Kennard<br>
&gt;<br>
&gt; Inactive hide details for Bogdan-Andrei Iancu ---10/08/2010 04:40:47 <br>
&gt; AM---Hi Kennard, Ok, keep the core next time :)Bogdan-Andrei Iancu <br>
&gt; ---10/08/2010 04:40:47 AM---Hi Kennard, Ok, keep the core next time :)<br>
&gt;<br>
&gt; From: Bogdan-Andrei Iancu &lt;bogdan@voice-system.ro&gt;<br>
&gt; To: OpenSIPS users mailling list &lt;users@lists.opensips.org&gt;<br>
&gt; Date: 10/08/2010 04:40 AM<br>
&gt; Subject: Re: [OpenSIPS-Users] opensips tm timer core dump<br>
&gt; Sent by: users-bounces@lists.opensips.org<br>
&gt;<br>
&gt; ------------------------------------------------------------------------<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Hi Kennard,<br>
&gt;<br>
&gt; Ok, keep the core next time :)<br>
&gt;<br>
&gt; Regards,<br>
&gt; Bogdan<br>
&gt;<br>
&gt; Kennard_White@logitech.com wrote:<br>
&gt; &gt;<br>
&gt; &gt; Hi Bogden,<br>
&gt; &gt;<br>
&gt; &gt; Thanks for explaining the child processes involved -- I misunderstood<br>
&gt; &gt; what was happening.<br>
&gt; &gt;<br>
&gt; &gt; Unfortunately, I don't have the core anymore. My recollection is that<br>
&gt; &gt; I couldn't print anything useful due to compiler optimization. That<br>
&gt; &gt; said, this should re-create pretty easily, and I'll get more dumps<br>
&gt; &gt; next time it happens.<br>
&gt; &gt;<br>
&gt; &gt; Regards,<br>
&gt; &gt; Kennard<br>
&gt; &gt;<br>
&gt; &gt; Inactive hide details for Bogdan-Andrei Iancu ---10/05/2010 01:41:38<br>
&gt; &gt; AM---Hi Kennard, The core was generated by process 22255:Bogdan-Andrei<br>
&gt; &gt; Iancu ---10/05/2010 01:41:38 AM---Hi Kennard, The core was generated<br>
&gt; &gt; by process 22255:<br>
&gt; &gt;<br>
&gt; &gt; From: Bogdan-Andrei Iancu &lt;bogdan@voice-system.ro&gt;<br>
&gt; &gt; To: OpenSIPS users mailling list &lt;users@lists.opensips.org&gt;<br>
&gt; &gt; Date: 10/05/2010 01:41 AM<br>
&gt; &gt; Subject: Re: [OpenSIPS-Users] opensips tm timer core dump<br>
&gt; &gt; Sent by: users-bounces@lists.opensips.org<br>
&gt; &gt;<br>
&gt; &gt; ------------------------------------------------------------------------<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Hi Kennard,<br>
&gt; &gt;<br>
&gt; &gt; The core was generated by process 22255:<br>
&gt; &gt; &nbsp; &nbsp;[22238]: INFO:core:handle_sigs: child process 22255 exited by a<br>
&gt; &gt; signal 11<br>
&gt; &gt;<br>
&gt; &gt; and this process also reported mem problems:<br>
&gt; &gt; &nbsp; &nbsp;[22255]: ERROR:tm:new_t: out of mem<br>
&gt; &gt;<br>
&gt; &gt; Can you print the &quot;tl&quot; or &quot;ptr&quot; variables in frame 0?<br>
&gt; &gt;<br>
&gt; &gt; Regards,<br>
&gt; &gt; Bogdan<br>
&gt; &gt;<br>
&gt; &gt; Kennard_White@logitech.com wrote:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Running against opensips HEAD, I got a segfault in the tm timer code.<br>
&gt; &gt; &gt; I believe this is triggered by running out of shared memory.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; The stack trace:<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; (gdb) where<br>
&gt; &gt; &gt; #0 0x00007fe8f8d96212 in insert_timer_unsafe (new_tl=0x7fe8f66337b0,<br>
&gt; &gt; &gt; list_id=WT_TIMER_LIST, ext_timeout=&lt;value optimized out&gt;) at <br>
&gt; timer.c:731<br>
&gt; &gt; &gt; #1 set_1timer (new_tl=0x7fe8f66337b0, list_id=WT_TIMER_LIST,<br>
&gt; &gt; &gt; ext_timeout=&lt;value optimized out&gt;) at timer.c:904<br>
&gt; &gt; &gt; #2 0x00007fe8f8d78ac8 in t_release_transaction (trans=0x7fe8f6633730)<br>
&gt; &gt; &gt; at t_funcs.c:122<br>
&gt; &gt; &gt; #3 0x00007fe8f8d808e5 in t_unref (p_msg=&lt;value optimized out&gt;)<br>
&gt; &gt; &gt; at t_lookup.c:1152<br>
&gt; &gt; &gt; #4 0x0000000000483ae5 in exec_post_req_cb ()<br>
&gt; &gt; &gt; #5 0x000000000046c1e4 in receive_msg ()<br>
&gt; &gt; &gt; #6 0x00000000004bc77c in udp_rcv_loop ()<br>
&gt; &gt; &gt; #7 0x000000000042de9c in main ()<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; The offending code (I believe):<br>
&gt; &gt; &gt; if (tl-&gt;time_out==ptr-&gt;time_out) {<br>
&gt; &gt; &gt; tl-&gt;ld_tl = ptr-&gt;ld_tl<br>
&gt; &gt; &gt; ptr-&gt;ld_tl = 0;<br>
&gt; &gt; &gt; tl-&gt;ld_tl-&gt;ld_tl = tl; &lt;-- SEG FAULT HERE (according to trace)<br>
&gt; &gt; &gt; } else {<br>
&gt; &gt; &gt; tl-&gt;ld_tl = tl;<br>
&gt; &gt; &gt; }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Unfortunately, due to optimization I cannot dump anything useful, and<br>
&gt; &gt; &gt; I'm not convinced the actual fault is on the line indicated. Note that<br>
&gt; &gt; &gt; the core dump is not one of the processes that reported out of memory.<br>
&gt; &gt; &gt; Maybe one of the other processes left the timer list in a corrupt <br>
&gt; state?<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; The log file:<br>
&gt; &gt; &gt; Sep 29 11:43:36 org-sip01 /var/run/openser/opensips-pres[22255]:<br>
&gt; &gt; &gt; ERROR:tm:sip_msg_cloner: no more share memory<br>
&gt; &gt; &gt; Sep 29 11:43:36 org-sip01 /var/run/openser/opensips-pres[22255]:<br>
&gt; &gt; &gt; ERROR:tm:new_t: out of mem<br>
&gt; &gt; &gt; Sep 29 11:43:36 org-sip01 /var/run/openser/opensips-pres[22255]:<br>
&gt; &gt; &gt; ERROR:tm:t_newtran: new_t failed<br>
&gt; &gt; &gt; Sep 29 11:43:36 org-sip01 /var/run/openser/opensips-pres[22254]:<br>
&gt; &gt; &gt; WARNING:core:fm_malloc: Not enough free memory, will atempt<br>
&gt; &gt; defragmenation<br>
&gt; &gt; &gt; Sep 29 11:43:36 org-sip01 /var/run/openser/opensips-pres[22254]:<br>
&gt; &gt; &gt; ERROR:tm:sip_msg_cloner: no more share memory<br>
&gt; &gt; &gt; Sep 29 11:43:36 org-sip01 /var/run/openser/opensips-pres[22254]:<br>
&gt; &gt; &gt; ERROR:tm:new_t: out of mem<br>
&gt; &gt; &gt; Sep 29 11:43:36 org-sip01 /var/run/openser/opensips-pres[22254]:<br>
&gt; &gt; &gt; ERROR:tm:t_newtran: new_t failed<br>
&gt; &gt; &gt; Sep 29 11:43:36 org-sip01 /var/run/openser/opensips-pres[22238]:<br>
&gt; &gt; &gt; INFO:core:handle_sigs: child process 22255 exited by a signal 11<br>
&gt; &gt; &gt; Sep 29 11:43:36 org-sip01 /var/run/openser/opensips-pres[22238]:<br>
&gt; &gt; &gt; INFO:core:handle_sigs: core was generated<br>
&gt; &gt; &gt; Sep 29 11:43:36 org-sip01 /var/run/openser/opensips-pres[22238]:<br>
&gt; &gt; &gt; INFO:core:handle_sigs: terminating due to SIGCHLD<br>
&gt; &gt; &gt; Sep 29 11:43:36 org-sip01 /var/run/openser/opensips-pres[22256]:<br>
&gt; &gt; &gt; INFO:core:sig_usr: signal 15 received<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; <br>
&gt; ------------------------------------------------------------------------<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; Users mailing list<br>
&gt; &gt; &gt; Users@lists.opensips.org<br>
&gt; &gt; &gt; </tt><tt><a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a></tt><tt><br>
&gt; &gt; &gt; &nbsp;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; Bogdan-Andrei Iancu<br>
&gt; &gt; OpenSIPS Bootcamp<br>
&gt; &gt; 15 - 19 November 2010, Edison, New Jersey, USA<br>
&gt; &gt; </tt><tt>www.voice-system.ro</tt><tt><br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Users mailing list<br>
&gt; &gt; Users@lists.opensips.org<br>
&gt; &gt; </tt><tt><a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a></tt><tt><br>
&gt; &gt;<br>
&gt; &gt; ------------------------------------------------------------------------<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Users mailing list<br>
&gt; &gt; Users@lists.opensips.org<br>
&gt; &gt; </tt><tt><a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a></tt><tt><br>
&gt; &gt; &nbsp;<br>
&gt;<br>
&gt;<br>
&gt; -- <br>
&gt; Bogdan-Andrei Iancu<br>
&gt; OpenSIPS Bootcamp<br>
&gt; 15 - 19 November 2010, Edison, New Jersey, USA<br>
&gt; </tt><tt>www.voice-system.ro</tt><tt><br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Users mailing list<br>
&gt; Users@lists.opensips.org<br>
&gt; </tt><tt><a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a></tt><tt><br>
&gt;<br>
&gt; ------------------------------------------------------------------------<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Users mailing list<br>
&gt; Users@lists.opensips.org<br>
&gt; </tt><tt><a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a></tt><tt><br>
&gt; &nbsp; <br>
<br>
<br>
-- <br>
Bogdan-Andrei Iancu<br>
OpenSIPS Bootcamp<br>
15 - 19 November 2010, Edison, New Jersey, USA<br>
</tt><tt>www.voice-system.ro</tt><tt><br>
<br>
<br>
_______________________________________________<br>
Users mailing list<br>
Users@lists.opensips.org<br>
</tt><tt><a href="http://lists.opensips.org/cgi-bin/mailman/listinfo/users">http://lists.opensips.org/cgi-bin/mailman/listinfo/users</a></tt><tt><br>
</tt><br>
</body></html>