From 8f51443a08e00335fbf83584d150edbac35c4a17 Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Wed, 26 Jul 2017 16:39:32 +0000 Subject: [PATCH] res_pjsip_session: Release media resources on session end quicker. A change was made long ago where the session was kept around until the underlying INVITE session had been destroyed. This had the side effect of also keeping the underlying media resources around for this time as well. This change ensures that when we know the session is ending we release the media resources immediately. ASTERISK-27110 Change-Id: I3c6a82fe7d2c50b9dc9197cb12ef22f20d337501 --- channels/chan_pjsip.c | 1 - res/res_pjsip_session.c | 15 +++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c index ebda6c7ee1..dd03b74ae8 100644 --- a/channels/chan_pjsip.c +++ b/channels/chan_pjsip.c @@ -2273,7 +2273,6 @@ static struct hangup_data *hangup_data_alloc(int cause, struct ast_channel *chan static void clear_session_and_channel(struct ast_sip_session *session, struct ast_channel *ast) { session->channel = NULL; - set_channel_on_rtp_instance(session, ""); ast_channel_tech_pvt_set(ast, NULL); } diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index bb349a4b67..40b197bf7c 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -1872,8 +1872,12 @@ static void session_destructor(void *obj) ast_taskprocessor_unreference(session->serializer); ao2_cleanup(session->datastores); - ast_sip_session_media_state_free(session->active_media_state); - ast_sip_session_media_state_free(session->pending_media_state); + if (session->active_media_state) { + ast_sip_session_media_state_free(session->active_media_state); + } + if (session->pending_media_state) { + ast_sip_session_media_state_free(session->pending_media_state); + } AST_LIST_HEAD_DESTROY(&session->supplements); while ((delay = AST_LIST_REMOVE_HEAD(&session->delayed_requests, next))) { @@ -3134,6 +3138,13 @@ static int session_end(void *vsession) iter->session_end(session); } } + + /* Release any media resources. */ + ast_sip_session_media_state_free(session->active_media_state); + session->active_media_state = NULL; + ast_sip_session_media_state_free(session->pending_media_state); + session->pending_media_state = NULL; + return 0; } -- 2.47.3