From 3c9ac8be44848cae9a8d6d484957a1079f983db2 Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Fri, 22 Aug 2008 16:59:21 +0000 Subject: [PATCH] Merged revisions 139457 via svnmerge from https://origsvn.digium.com/svn/asterisk/trunk ................ r139457 | mmichelson | 2008-08-22 11:58:21 -0500 (Fri, 22 Aug 2008) | 15 lines Merged revisions 139456 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r139456 | mmichelson | 2008-08-22 11:57:38 -0500 (Fri, 22 Aug 2008) | 7 lines 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.6.0@139458 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_iax2.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 3570324ebb..8939fc3446 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -8694,11 +8694,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_debug(1, "Parked call on '%s'\n", ast_bridged_channel(iaxs[fr->callno]->owner)->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,