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
15.6
Joshua Colp 8 years ago committed by George Joseph
parent ef39998169
commit 8f51443a08

@ -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);
}

@ -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;
}

Loading…
Cancel
Save