summaryrefslogtreecommitdiff
path: root/channels/chan_pjsip.c
diff options
context:
space:
mode:
Diffstat (limited to 'channels/chan_pjsip.c')
-rw-r--r--channels/chan_pjsip.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index a92816431..5bf339ee9 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -2052,11 +2052,16 @@ static int hangup(void *data)
struct ast_sip_session *session = channel->session;
int cause = h_data->cause;
- ast_sip_session_terminate(session, cause);
+ /*
+ * It's possible that session_terminate might cause the session to be destroyed
+ * immediately so we need to keep a reference to it so we can NULL session->channel
+ * afterwards.
+ */
+ ast_sip_session_terminate(ao2_bump(session), cause);
clear_session_and_channel(session, ast, pvt);
+ ao2_cleanup(session);
ao2_cleanup(channel);
ao2_cleanup(h_data);
-
return 0;
}