From 5d7e2748ce6ca3f58e5310f8d7d8f78e94e4db90 Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Fri, 16 Aug 2024 10:31:16 +0700 Subject: [PATCH] Don't restart retransmit timer when transport is pending (IP change scenario) (#4037) --- pjsip/src/pjsip/sip_transaction.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pjsip/src/pjsip/sip_transaction.c b/pjsip/src/pjsip/sip_transaction.c index a669f8f7a..5d6031221 100644 --- a/pjsip/src/pjsip/sip_transaction.c +++ b/pjsip/src/pjsip/sip_transaction.c @@ -2369,6 +2369,8 @@ static void tsx_tp_state_callback( pjsip_transport *tp, tsx = (pjsip_transaction*)info->user_data; + tsx->transport_flag &= ~(TSX_HAS_PENDING_TRANSPORT); + /* Post the event for later processing, to avoid deadlock. * See https://github.com/pjsip/pjproject/issues/1646 */ @@ -2692,6 +2694,13 @@ static pj_status_t tsx_retransmit( pjsip_transaction *tsx, int resched) return status; } + /* Cancel retransmission timer if transport is pending. */ + if (resched && (tsx->transport_flag & TSX_HAS_PENDING_TRANSPORT)) + { + tsx_cancel_timer( tsx, &tsx->retransmit_timer ); + tsx->transport_flag |= TSX_HAS_PENDING_RESCHED; + } + return PJ_SUCCESS; }