aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authormmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-22 16:59:21 +0000
committermmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-22 16:59:21 +0000
commite574af79b3102f63cb5d0735362c2a1ab1ccb08e (patch)
treeb581b2cc0f05203c94f72e0a197b81cd2204a4b5 /channels
parentbf70b14cabc495ea52c8cb493fd621615e732a68 (diff)
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: http://svn.digium.com/svn/asterisk/branches/1.6.0@139458 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_iax2.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 3570324eb..8939fc344 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,