From: Mark Michelson Date: Fri, 22 Aug 2008 16:57:38 +0000 (+0000) Subject: Prevent a deadlock in chan_iax2 resulting from X-Git-Tag: 1.4.22-rc3~32 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=64102eed1864e23342842d53334473f4a6b9839f;p=thirdparty%2Fasterisk.git Prevent a deadlock in chan_iax2 resulting from incorrect locking order between iax2_pvt and ast_channel structures. AST-13 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@139456 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 2f5ba90d5f..a269d634a3 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -7851,11 +7851,14 @@ retryowner: pbx_builtin_setvar_helper(bridged_chan, "BLINDTRANSFER", iaxs[fr->callno]->owner->name); if (!strcmp(ies.called_number, ast_parking_ext())) { - if (iax_park(bridged_chan, iaxs[fr->callno]->owner)) { + struct ast_channel *saved_channel = iaxs[fr->callno]->owner; + ast_mutex_unlock(iaxsl[fr->callno]); + if (iax_park(bridged_chan, saved_channel)) { ast_log(LOG_WARNING, "Failed to park call on '%s'\n", bridged_chan->name); } else { ast_log(LOG_DEBUG, "Parked call on '%s'\n", bridged_chan->name); } + ast_mutex_lock(iaxsl[fr->callno]); } else { if (ast_async_goto(bridged_chan, iaxs[fr->callno]->context, ies.called_number, 1)) ast_log(LOG_WARNING, "Async goto of '%s' to '%s@%s' failed\n", bridged_chan->name,