[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