From: Richard Mudgett Date: Tue, 6 Apr 2010 00:10:16 +0000 (+0000) Subject: DAHDI/PRI call to pri_channel_bridge() not protected by PRI lock. X-Git-Tag: 1.4.32-rc1~43 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f4fc6dfb4ac68c3da01eccd0eafcfc64b7ac57c1;p=thirdparty%2Fasterisk.git DAHDI/PRI call to pri_channel_bridge() not protected by PRI lock. SWP-1231 ABE-2163 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@256225 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index d21ec017f4..39e67d3616 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -3561,7 +3561,6 @@ static enum ast_bridge_result dahdi_bridge(struct ast_channel *c0, struct ast_ch #ifdef PRI_2BCT int triedtopribridge = 0; - q931_call *q931c0 = NULL, *q931c1 = NULL; #endif /* For now, don't attempt to native bridge if either channel needs DTMF detection. @@ -3777,13 +3776,15 @@ static enum ast_bridge_result dahdi_bridge(struct ast_channel *c0, struct ast_ch } #ifdef PRI_2BCT - q931c0 = p0->call; - q931c1 = p1->call; - if (p0->transfer && p1->transfer - && q931c0 && q931c1 - && !triedtopribridge) { - pri_channel_bridge(q931c0, q931c1); + if (!triedtopribridge) { triedtopribridge = 1; + if (p0->pri && p0->pri == p1->pri && p0->transfer && p1->transfer) { + ast_mutex_lock(&p0->pri->lock); + if (p0->call && p1->call) { + pri_channel_bridge(p0->call, p1->call); + } + ast_mutex_unlock(&p0->pri->lock); + } } #endif