diff options
author | Richard Mudgett <rmudgett@digium.com> | 2016-02-29 20:41:55 -0600 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2016-03-01 20:08:26 -0600 |
commit | 4c5998ff556eed8e9cb266de86c83cde95b103aa (patch) | |
tree | af354dc54e6dc2e3ac2af017c80d0b9a43a0d158 /res | |
parent | d1495bc0ebed86d322488bed647b43aba0ae9b1f (diff) |
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
Diffstat (limited to 'res')
-rw-r--r-- | res/res_pjsip_send_to_voicemail.c | 3 |
1 files changed, 1 insertions, 2 deletions
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; } |