[commit] r9504 - in freeswitch/trunk/libs/sofia-sip: . libsofia-sip-ua/nua
Author: mikej Date: Wed Sep 10 12:20:05 2008 New Revision: 9504 Modified: freeswitch/trunk/libs/sofia-sip/.update freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c Log: Wed Sep 10 09:05:24 EDT 2008 Pekka Pessi <first.last@nokia.com> * nua_session.c: fixed client request reference counting in nua_session_usage_remove() Bug reported by Della Betta Filippo. Modified: freeswitch/trunk/libs/sofia-sip/.update ============================================================================== --- freeswitch/trunk/libs/sofia-sip/.update (original) +++ freeswitch/trunk/libs/sofia-sip/.update Wed Sep 10 12:20:05 2008 @@ -1 +1 @@ -Wed Sep 10 12:19:39 EDT 2008 +Wed Sep 10 12:19:57 EDT 2008 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 Sep 10 12:20:05 2008 @@ -258,11 +258,12 @@ if (cr == cr0) continue; + nua_client_request_ref(cr); + if (nua_invite_client_should_ack(cr)) { ss->ss_reporting = 1; nua_invite_client_ack(cr, NULL); ss->ss_reporting = 0; - nua_client_request_clean(cr); } if (cr == du->du_cr && cr->cr_orq) @@ -278,6 +279,8 @@ nua_client_request_remove(cr); + nua_client_request_unref(cr); + cr_next = ds->ds_cr; } Modified: freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c ============================================================================== --- freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c (original) +++ freeswitch/trunk/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c Wed Sep 10 12:20:05 2008 @@ -2154,16 +2154,23 @@ int nua_client_request_remove(nua_client_request_t *cr) { - if (cr->cr_prev) + int retval = 0; + int in_queue = cr->cr_prev != NULL; + + if (in_queue) { if ((*cr->cr_prev = cr->cr_next)) cr->cr_next->cr_prev = cr->cr_prev; + } cr->cr_prev = NULL, cr->cr_next = NULL; if (cr->cr_timer) { su_timer_destroy(cr->cr_timer), cr->cr_timer = NULL; - nua_client_request_unref(cr); + retval = nua_client_request_unref(cr); } + if (!in_queue) + return retval; + return nua_client_request_unref(cr); }
participants (1)
-
Freeswitch SVN