From 45fe2e81e2237a09d62eefa10d23a8945874a942 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Thu, 25 Jun 2009 10:05:18 +0000 Subject: [PATCH] Ticket #906: Transaction is not destroyed when transport timeout event comes later than transaction timeout (thanks Norma Steveley for the report) git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@2797 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsip/sip_transaction.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pjsip/src/pjsip/sip_transaction.c b/pjsip/src/pjsip/sip_transaction.c index 4ab946326..85fab1f0d 100644 --- a/pjsip/src/pjsip/sip_transaction.c +++ b/pjsip/src/pjsip/sip_transaction.c @@ -1697,7 +1697,10 @@ static void send_msg_callback( pjsip_send_state *send_state, tsx->transport = NULL; } - if (!*cont) { + /* Also stop processing if transaction has been flagged with + * pending destroy (http://trac.pjsip.org/repos/ticket/906) + */ + if ((!*cont) || (tsx->transport_flag & TSX_HAS_PENDING_DESTROY)) { char errmsg[PJ_ERR_MSG_SIZE]; pjsip_status_code sc; pj_str_t err; @@ -1733,6 +1736,14 @@ static void send_msg_callback( pjsip_send_state *send_state, { tsx_set_state( tsx, PJSIP_TSX_STATE_TERMINATED, PJSIP_EVENT_TRANSPORT_ERROR, send_state->tdata); + } + /* Don't forget to destroy if we have pending destroy flag + * (http://trac.pjsip.org/repos/ticket/906) + */ + else if (tsx->transport_flag & TSX_HAS_PENDING_DESTROY) + { + tsx_set_state( tsx, PJSIP_TSX_STATE_DESTROYED, + PJSIP_EVENT_TRANSPORT_ERROR, send_state->tdata); } } else {