diff options
Diffstat (limited to 'pjnath')
-rw-r--r-- | pjnath/src/pjnath/turn_sock.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/pjnath/src/pjnath/turn_sock.c b/pjnath/src/pjnath/turn_sock.c index 131c433d..919c0839 100644 --- a/pjnath/src/pjnath/turn_sock.c +++ b/pjnath/src/pjnath/turn_sock.c @@ -211,6 +211,7 @@ static void destroy(pj_turn_sock *turn_sock) } if (turn_sock->active_sock) { + pj_activesock_set_user_data(turn_sock->active_sock, NULL); pj_activesock_close(turn_sock->active_sock); turn_sock->active_sock = NULL; } @@ -463,6 +464,16 @@ static pj_bool_t on_connect_complete(pj_activesock_t *asock, pj_turn_sock *turn_sock; turn_sock = (pj_turn_sock*) pj_activesock_get_user_data(asock); + if (!turn_sock) + return PJ_FALSE; + + /* TURN session may have already been destroyed here. + * See ticket #1557 (http://trac.pjsip.org/repos/ticket/1557). + */ + if (!turn_sock->sess) { + sess_fail(turn_sock, "TURN session already destroyed", status); + return PJ_FALSE; + } if (status != PJ_SUCCESS) { sess_fail(turn_sock, "TCP connect() error", status); |