diff options
-rw-r--r-- | pjnath/src/pjnath/stun_transaction.c | 2 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_core.c | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/pjnath/src/pjnath/stun_transaction.c b/pjnath/src/pjnath/stun_transaction.c index 289c3a68..28f62300 100644 --- a/pjnath/src/pjnath/stun_transaction.c +++ b/pjnath/src/pjnath/stun_transaction.c @@ -262,7 +262,7 @@ static pj_status_t tsx_transmit_msg(pj_stun_client_tsx *tsx, if (status == PJNATH_ESTUNDESTROYED) { /* We've been destroyed, don't access the object. */ } else if (status != PJ_SUCCESS) { - if (mod_count) { + if (mod_count || status == PJ_EINVALIDOP) { pj_timer_heap_cancel_if_active( tsx->timer_heap, &tsx->retransmit_timer, TIMER_INACTIVE); diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c index 29febd60..a599bd45 100644 --- a/pjsip/src/pjsua-lib/pjsua_core.c +++ b/pjsip/src/pjsua-lib/pjsua_core.c @@ -1161,7 +1161,20 @@ static void destroy_stun_resolve(pjsua_stun_resolve *sess) return; PJSUA_LOCK(); + + if (sess->stun_sock) { + pj_stun_sock_destroy(sess->stun_sock); + sess->stun_sock = NULL; + } + + if (pjsua_var.stun_status == PJ_EUNKNOWN || + pjsua_var.stun_status == PJ_EPENDING) + { + pjsua_var.stun_status = PJNATH_ESTUNDESTROYED; + } + pj_list_erase(sess); + PJSUA_UNLOCK(); pj_assert(sess->stun_sock==NULL); |