[Freeswitch-svn] [commit] r11872 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nua

FreeSWITCH SVN mikej at freeswitch.org
Wed Feb 11 09:38:16 PST 2009


Author: mikej
Date: Wed Feb 11 11:38:16 2009
New Revision: 11872

Log:
Tue Feb 10 07:03:27 CST 2009  Pekka Pessi <first.last at nokia.com>
  * nua_session.c: fixed race condition with ACK
  Ignore-this: 37d3e74b169e8a154b9734dbade74d84
  
  Response message got destroyed after sending ACK if stack was run in
  multithreaded mode.



Modified:
   freeswitch/trunk/libs/sofia-sip/.update
   freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c

Modified: freeswitch/trunk/libs/sofia-sip/.update
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/.update	(original)
+++ freeswitch/trunk/libs/sofia-sip/.update	Wed Feb 11 11:38:16 2009
@@ -1 +1 @@
-Wed Feb 11 11:37:16 CST 2009
+Wed Feb 11 11:38:10 CST 2009

Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c
==============================================================================
--- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c	(original)
+++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c	Wed Feb 11 11:38:16 2009
@@ -1021,13 +1021,14 @@
   nua_dialog_state_t *ds = nh->nh_ds;
   nua_dialog_usage_t *du = cr->cr_usage;
   nua_session_usage_t *ss = nua_dialog_usage_private(du);
+  msg_t *response = nta_outgoing_getresponse(orq);
   unsigned next_state;
   int error;
 
   nh_referral_respond(nh, status, phrase); /* XXX - restarting after 401/407 */
 
   nua_stack_event(nh->nh_nua, nh,
-		  nta_outgoing_getresponse(orq),
+		  response,
 		  cr->cr_event,
 		  status, phrase,
 		  tags);
@@ -1049,6 +1050,8 @@
     return 1;
   }
 
+  response = msg_ref_create(response); /* Keep reference to contents of sip */
+
   if (orq != cr->cr_orq && cr->cr_orq) {	/* Being restarted */
     next_state = nua_callstate_calling;
   }
@@ -1144,6 +1147,8 @@
 
   signal_call_state_change(nh, ss, status, phrase, next_state);
 
+  msg_destroy(response);
+
   return 1;
 }
 



More information about the Freeswitch-svn mailing list