From e0f565663b49e14c15d7b5e6e9ff7396956b91f6 Mon Sep 17 00:00:00 2001
From: Walter Doekes <walter+asterisk@wjd.nu>
Date: Thu, 2 Jul 2015 16:08:12 +0200
Subject: [PATCH] chan_sip: Fix early call pickup channel leak.

When handle_invite_replaces() was called, and either ast_bridge_impart()
failed or there was no bridge (because the channel we're picking up was
still ringing), chan_sip would leak a channel.

Thanks Matt and Corey for checking the bridge path.

ASTERISK-25226 #close

Change-Id: Ie736bb182170a73eef5bcef0ab0376f645c260c8
---
 channels/chan_sip.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 30cb20de86..1838bdaadd 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -24932,10 +24932,12 @@ static int handle_invite_replaces(struct sip_pvt *p, struct sip_request *req,
 		if (ast_bridge_impart(bridge, c, replaces_chan, NULL,
 			AST_BRIDGE_IMPART_CHAN_INDEPENDENT)) {
 			ast_hangup(c);
+			ast_channel_unref(c);
 		}
 	} else {
 		ast_channel_move(replaces_chan, c);
 		ast_hangup(c);
+		ast_channel_unref(c);
 	}
 	sip_pvt_lock(p);
 	return 0;
-- 
GitLab