[Devel] Re: 1.1 abort()
Bogdan-Andrei Iancu
bogdan at voice-system.ro
Wed Sep 6 18:16:44 CEST 2006
Hi Mark,
thanks for the debug info you sent me - hopefully I found and generated
a fix for the problem. It is not a serious bug - it is harmful but it
fails some sanity checks inserted via EXTRA_DEBUG.
please find attached a patch - apply it and give it a try to see if the
problem goes away.
Thanks and regards,
Bogdan
Mark Kent wrote:
>>>openser1.1.0, freebsd, I get the abort() here:
>>>
>>>
>
>OK, I can reproduce the failure now. The failure happens
>under these conditions:
>
>UAC1 invites foo at openser, which triggers two branches.
>Both phones ring, neither are answered, UAC1 sends CANCEL
>to openser box which is relayed to both phones.
>
>PHONE1 says "487 Request Terminated", openser says "ACK"
>PHONE1 says "OK"
>
>PHONE2 says "487 Request Terminated", openser does not reply,
>PHONE2 says "OK" (?)
>
>Now it gets weird...
>
>PHONE2 says "487 Request Terminated" again, and openser sends a CANCEL
>to both phones, both phones say "OK" and then PHONE2 sends two
>identical rapid fire "487 Request Terminated" messages and openser
>crashes on the one of them...
>
>The abort() is in a "ifdef EXTRA_DEBUG", but it looks like
>there would be a memory leak if that code was skipped.
>Also, I'm guessing the abort() is there because it indicates
>that something wasn't handled as expected elsewhere in the code.
>
>What should I do next?
>
>Thanks,
>-mark
>
>_______________________________________________
>Devel mailing list
>Devel at openser.org
>http://openser.org/cgi-bin/mailman/listinfo/devel
>
>
>
-------------- next part --------------
Index: modules/tm/t_reply.c
===================================================================
RCS file: /cvsroot/openser/sip-server/modules/tm/t_reply.c,v
retrieving revision 1.28
diff -u -r1.28 t_reply.c
--- modules/tm/t_reply.c 27 Jun 2006 14:58:33 -0000 1.28
+++ modules/tm/t_reply.c 6 Sep 2006 16:12:37 -0000
@@ -733,11 +733,13 @@
*should_store=1;
*should_relay=-1;
picked_branch=-1;
+ Trans->uac[branch].reply = 0;
return RPS_STORE;
}
if (picked_branch==-1) {
LOG(L_CRIT, "ERROR:tm:t_should_relay_response: pick_branch failed "
"(lowest==-1) for code %d\n",new_code);
+ Trans->uac[branch].reply = 0;
goto discard;
}
More information about the Devel
mailing list