/* * Destroy. */ static void destroy(pj_turn_sock *turn_sock) { if (turn_sock->lock) { pj_lock_acquire(turn_sock->lock); } if (turn_sock->sess) { pj_turn_session_set_user_data(turn_sock->sess, NULL); pj_turn_session_shutdown(turn_sock->sess); turn_sock->sess = NULL; } if (turn_sock->active_sock) { PJ_LOG(4, ("turn_session.c", "!!! TURN DEALLOCATE !!! in destroy() close connection")); pj_activesock_set_user_data(turn_sock->active_sock, NULL); pj_activesock_close(turn_sock->active_sock); turn_sock->active_sock = NULL; } if (turn_sock->lock) { pj_lock_release(turn_sock->lock); pj_lock_destroy(turn_sock->lock); turn_sock->lock = NULL; } if (turn_sock->pool) { pj_pool_t *pool = turn_sock->pool; turn_sock->pool = NULL; pj_pool_release(pool); } }
/* * Destroy. */ static void destroy(pj_turn_sock *turn_sock) { if (turn_sock->lock) { pj_lock_acquire(turn_sock->lock); } if (turn_sock->sess) { pj_turn_session_set_user_data(turn_sock->sess, NULL); pj_turn_session_shutdown(turn_sock->sess); turn_sock->sess = NULL; } if (turn_sock->active_sock) { pj_activesock_close(turn_sock->active_sock); turn_sock->active_sock = NULL; } if (turn_sock->lock) { pj_lock_release(turn_sock->lock); pj_lock_destroy(turn_sock->lock); turn_sock->lock = NULL; } if (turn_sock->pool) { pj_pool_t *pool = turn_sock->pool; turn_sock->pool = NULL; pj_pool_release(pool); } }
PJ_DEF(void) pj_turn_sock_destroy(pj_turn_sock *turn_sock) { pj_lock_acquire(turn_sock->lock); turn_sock->destroy_request = PJ_TRUE; if (turn_sock->sess) { pj_turn_session_shutdown(turn_sock->sess); /* This will ultimately call our state callback, and when * session state is DESTROYING we will schedule a timer to * destroy ourselves. */ pj_lock_release(turn_sock->lock); } else { pj_lock_release(turn_sock->lock); destroy(turn_sock); } }
static void destroy(pj_turn_sock *turn_sock) { PJ_LOG(4,(turn_sock->obj_name, "TURN socket destroy request, ref_cnt=%d", pj_grp_lock_get_ref(turn_sock->grp_lock))); pj_grp_lock_acquire(turn_sock->grp_lock); if (turn_sock->is_destroying) { pj_grp_lock_release(turn_sock->grp_lock); return; } turn_sock->is_destroying = PJ_TRUE; if (turn_sock->sess) pj_turn_session_shutdown(turn_sock->sess); if (turn_sock->active_sock) pj_activesock_close(turn_sock->active_sock); pj_grp_lock_dec_ref(turn_sock->grp_lock); pj_grp_lock_release(turn_sock->grp_lock); }
PJ_DEF(void) pj_turn_sock_destroy(pj_turn_sock *turn_sock) { pj_grp_lock_acquire(turn_sock->grp_lock); if (turn_sock->is_destroying) { pj_grp_lock_release(turn_sock->grp_lock); return; } if (turn_sock->sess) { pj_turn_session_shutdown(turn_sock->sess); /* This will ultimately call our state callback, and when * session state is DESTROYING we will schedule a timer to * destroy ourselves. */ } else { destroy(turn_sock); } pj_grp_lock_release(turn_sock->grp_lock); }