From 84e1790beb1c28f762fa991f99d4a41ede2c3935 Mon Sep 17 00:00:00 2001 From: Kevin Harwell Date: Fri, 13 Dec 2013 18:33:25 +0000 Subject: bridge_native_rtp: Deadlock during 4-way conference creation The change contains a slightly adjusted patch that was on the issue (submitted by kmoore). A fix was made by adding in a bridge lock while calling bridge_start/stop from the framehook callback. Since the framehook callback is not called from the bridging core the bridge is not locked, but needs to be before calling bridge_start. (closes issue ASTERISK-22749) Reported by: Kinsey Moore Review: https://reviewboard.asterisk.org/r/3066/ Patches: lock_inversion.diff uploaded by kmoore (license 6273) ........ Merged revisions 403767 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@403768 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/channel.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'main/channel.c') diff --git a/main/channel.c b/main/channel.c index 58b50c820..d1643658e 100644 --- a/main/channel.c +++ b/main/channel.c @@ -6869,13 +6869,11 @@ void ast_do_masquerade(struct ast_channel *original) } ast_debug(1, "Done Masquerading %s (%d)\n", ast_channel_name(original), ast_channel_state(original)); + ast_channel_unlock(original); if ((bridged = ast_channel_bridge_peer(original))) { - ast_channel_unlock(original); ast_indicate(bridged, AST_CONTROL_SRCCHANGE); ast_channel_unref(bridged); - } else { - ast_channel_unlock(original); } ast_indicate(original, AST_CONTROL_SRCCHANGE); -- cgit v1.2.3