From 4c5998ff556eed8e9cb266de86c83cde95b103aa Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Mon, 29 Feb 2016 20:41:55 -0600 Subject: res_pjsip_send_to_voicemail.c: Fix off-nominal double channel unref. * Fix double unref of other_party channel in off nominal path. * This is unlikely to be a real problem. However, for safety, in handle_incoming_request() keep the datastore ref with the other_party channel ref until we are finished with the other_party channel. Change-Id: I78f22547bf0bb99fb20814ceab75952bd857f821 --- res/res_pjsip_send_to_voicemail.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'res/res_pjsip_send_to_voicemail.c') diff --git a/res/res_pjsip_send_to_voicemail.c b/res/res_pjsip_send_to_voicemail.c index 3a57aea7a..e7197ad4a 100644 --- a/res/res_pjsip_send_to_voicemail.c +++ b/res/res_pjsip_send_to_voicemail.c @@ -160,12 +160,10 @@ static int handle_incoming_request(struct ast_sip_session *session, struct pjsip sip_session_datastore->data = other_party; if (ast_sip_session_add_datastore(session, sip_session_datastore)) { - ast_channel_unref(other_party); ao2_ref(sip_session_datastore, -1); send_response(session, 500, rdata); return -1; } - ao2_ref(sip_session_datastore, -1); if (has_feature) { pbx_builtin_setvar_helper(other_party, SEND_TO_VM_HEADER, @@ -177,6 +175,7 @@ static int handle_incoming_request(struct ast_sip_session *session, struct pjsip SEND_TO_VM_REDIRECT_VALUE); } + ao2_ref(sip_session_datastore, -1); return 0; } -- cgit v1.2.3