diff options
Diffstat (limited to 'res/res_pjsip_session.c')
-rw-r--r-- | res/res_pjsip_session.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index bb349a4b6..40b197bf7 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; } |