From: Walter Doekes Date: Thu, 2 Jul 2015 14:08:12 +0000 (+0200) Subject: chan_sip: Fix early call pickup channel leak. X-Git-Tag: 13.5.0-rc1~57^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e0f565663b49e14c15d7b5e6e9ff7396956b91f6;p=thirdparty%2Fasterisk.git 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 --- 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;