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 [EMAIL PROTECTED], 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
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/devel


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;
                }
 
_______________________________________________
Devel mailing list
[email protected]
http://openser.org/cgi-bin/mailman/listinfo/devel

Reply via email to