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