diff --git a/src/channels/chan_voicemngr.c b/src/channels/chan_voicemngr.c index 60fb25d8ccf7dd33315e8c5afb223f352ec17a2b..30724ef278d294fcd14f0271e429aaaea551909a 100644 --- a/src/channels/chan_voicemngr.c +++ b/src/channels/chan_voicemngr.c @@ -838,7 +838,6 @@ static int chan_voicemngr_indicate(struct ast_channel *ast, int condition, const case AST_CONTROL_UNHOLD: pvt_lock(sub->parent, "indicate"); chan_voicemngr_stop_dialtone(sub->parent); - pvt_unlock(sub->parent); // Play a beep when unholding. play_bridge_channel = ast_channel_get_bridge_channel(ast); ast_bridge_channel_queue_playfile(play_bridge_channel, NULL, "beep", NULL); @@ -852,6 +851,7 @@ static int chan_voicemngr_indicate(struct ast_channel *ast, int condition, const astFrame.frametype = AST_FRAME_CONTROL; astFrame.subclass.integer = AST_CONTROL_SRCUPDATE; ast_bridge_queue_everyone_else(myBridge, NULL, &astFrame); + pvt_unlock(sub->parent); break; case AST_CONTROL_UPDATE_RTP_PEER: @@ -5388,16 +5388,15 @@ static int chan_voicemngr_create_conference(struct chan_voicemngr_pvt *p) // Move second call into first bridge and wait for it to finish. chanToKick[0] = second->owner; - if(onholdBridge && secondBridge) - res = ast_bridge_merge(onholdBridge, secondBridge, 0, chanToKick, 1); pvt_lock(second->parent, "moving call to first bridge"); + if(onholdBridge && secondBridge) + res = ast_bridge_merge(onholdBridge, secondBridge, 0, chanToKick, 1); while(ast_bridge_find_by_id(second->conference_id)) sched_yield(); - pvt_unlock(second->parent); // SIP calls need unhold sent to the bridge as well. astFrame.frametype = AST_FRAME_CONTROL; astFrame.subclass.integer = AST_CONTROL_UNHOLD; ast_bridge_queue_everyone_else(onholdBridge, NULL, &astFrame); - + pvt_unlock(second->parent); ast_log(LOG_NOTICE,"Conference started \n"); return res; }