diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index b81bfa6782..2517baf3f5 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Wed Sep 10 12:19:39 EDT 2008 +Wed Sep 10 12:19:57 EDT 2008 diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c b/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c index 564371b735..78826ac3c7 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c @@ -258,11 +258,12 @@ void nua_session_usage_remove(nua_handle_t *nh, 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 @@ void nua_session_usage_remove(nua_handle_t *nh, nua_client_request_remove(cr); + nua_client_request_unref(cr); + cr_next = ds->ds_cr; } diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c b/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c index 59675129b6..493f724801 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c @@ -2154,16 +2154,23 @@ int nua_client_request_queue(nua_client_request_t *cr) 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); }