[Asterisk-code-review] chan_pjsip: Incorporate session reference count into transfer_refer(). (asterisk[master])

Dan Cropp asteriskteam at digium.com
Tue Dec 8 09:00:21 CST 2020


Dan Cropp has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/15208 )


Change subject: chan_pjsip: Incorporate session reference count into transfer_refer().
......................................................................

chan_pjsip: Incorporate session reference count into transfer_refer().

Add session reference count for PJSIP REFER. The call could be terminated
prior to the result of the transfer. In that scenario, when the SUBSCRIBE/NOTIFY
occurred several minutes later, it would attempt to access a session which was
no longer valid.

ASTERISK-29201 #close
Reported-by: Dan Cropp

Change-Id: I3fd92fd14b4e3844d3d7b0f60fe417a4df5f2435
---
M channels/chan_pjsip.c
1 file changed, 6 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/08/15208/1

diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index 93889fc..8e74d7d 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -2004,6 +2004,9 @@
 
 	chan = session->channel;
 	if (!chan) {
+		/* If there is no channel, terminate the subscription and release the session */
+		pjsip_evsub_terminate(sub, PJ_FALSE);
+		ao2_cleanup(session);
 		return;
 	}
 
@@ -2094,6 +2097,7 @@
 
 	if (res) {
 		ast_queue_control_data(session->channel, AST_CONTROL_TRANSFER, &message, sizeof(message));
+		ao2_cleanup(session);
 	}
 }
 
@@ -2118,12 +2122,14 @@
 	}
 
 	pjsip_evsub_set_mod_data(sub, refer_callback_module.id, session);
+	ao2_ref(session, +1);
 
 	if (pjsip_xfer_initiate(sub, pj_cstr(&tmp, target), &packet) != PJ_SUCCESS) {
 		message = AST_TRANSFER_FAILED;
 		ast_queue_control_data(session->channel, AST_CONTROL_TRANSFER, &message, sizeof(message));
 		pjsip_evsub_terminate(sub, PJ_FALSE);
 
+		ao2_cleanup(session);
 		return;
 	}
 

-- 
To view, visit https://gerrit.asterisk.org/c/asterisk/+/15208
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Change-Id: I3fd92fd14b4e3844d3d7b0f60fe417a4df5f2435
Gerrit-Change-Number: 15208
Gerrit-PatchSet: 1
Gerrit-Owner: Dan Cropp <dan at amtelco.com>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20201208/e65b65e6/attachment.html>


More information about the asterisk-code-review mailing list