res_pjsip_send_to_voicemail.c: Fix off-nominal double channel unref.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 1 Mar 2016 02:41:55 +0000 (20:41 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 2 Mar 2016 02:09:32 +0000 (20:09 -0600)
* 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

index 9d2b5b1..cd0f05f 100644 (file)
@@ -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;
 }