summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2015-07-14 01:18:19 +0000
committerLiong Sauw Ming <ming@teluu.com>2015-07-14 01:18:19 +0000
commitfb157fc3a5f46e294c5ed58f4a738539ff29c40e (patch)
treeafee3f56d8743773fcfe23355aeddc573e95821a
parent8dadebaac315fd063d23e9f5b9518cf7220da9b9 (diff)
Fixed #1869: Destroy STUN session when cleaning up STUN server resolution
Thanks to Itay Bianco for the patch git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5133 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjnath/src/pjnath/stun_transaction.c2
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c13
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);