From 01444a756c3eb047e4c44070dae49aed0359e607 Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Fri, 8 Feb 2013 07:33:23 +0000 Subject: Re #1610: Workaround for crash in sess_on_send_msg() callback git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4344 74dad513-b988-da41-8d7b-12977e46ad98 --- pjnath/src/pjnath/stun_sock.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'pjnath') diff --git a/pjnath/src/pjnath/stun_sock.c b/pjnath/src/pjnath/stun_sock.c index 725c4c8f..3f756f50 100644 --- a/pjnath/src/pjnath/stun_sock.c +++ b/pjnath/src/pjnath/stun_sock.c @@ -390,14 +390,19 @@ PJ_DEF(pj_status_t) pj_stun_sock_destroy(pj_stun_sock *stun_sock) stun_sock->q = NULL; } + if (stun_sock->stun_sess) { + pj_stun_session_set_user_data(stun_sock->stun_sess, NULL); + } + /* Destroy the active socket first just in case we'll get * stray callback. */ if (stun_sock->active_sock != NULL) { - pj_activesock_set_user_data(stun_sock->active_sock, NULL); - pj_activesock_close(stun_sock->active_sock); + pj_activesock_t *asock = stun_sock->active_sock; stun_sock->active_sock = NULL; stun_sock->sock_fd = PJ_INVALID_SOCKET; + pj_activesock_set_user_data(asock, NULL); + pj_activesock_close(asock); } else if (stun_sock->sock_fd != PJ_INVALID_SOCKET) { pj_sock_close(stun_sock->sock_fd); stun_sock->sock_fd = PJ_INVALID_SOCKET; @@ -620,6 +625,8 @@ static pj_status_t sess_on_send_msg(pj_stun_session *sess, pj_ssize_t size; stun_sock = (pj_stun_sock *) pj_stun_session_get_user_data(sess); + if (!stun_sock || !stun_sock->active_sock) + return PJ_EINVALIDOP; pj_assert(token==INTERNAL_MSG_TOKEN); PJ_UNUSED_ARG(token); @@ -648,6 +655,8 @@ static void sess_on_request_complete(pj_stun_session *sess, pj_bool_t resched = PJ_TRUE; stun_sock = (pj_stun_sock *) pj_stun_session_get_user_data(sess); + if (!stun_sock) + return; PJ_UNUSED_ARG(tdata); PJ_UNUSED_ARG(token); -- cgit v1.2.3