From e19e329fc788779c5e1c86b6eccd0e534ef36404 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 9 Mar 2017 15:04:09 -0600 Subject: [PATCH] FS-10107: [mod_conference] Reduce contention on layer floor changes --- .../mod_conference/conference_video.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/mod/applications/mod_conference/conference_video.c b/src/mod/applications/mod_conference/conference_video.c index a75335da1f..0a9b319bc4 100644 --- a/src/mod/applications/mod_conference/conference_video.c +++ b/src/mod/applications/mod_conference/conference_video.c @@ -652,7 +652,13 @@ void conference_video_detach_video_layer(conference_member_t *member) if (member->video_layer_id < 0) { goto end; } - + + if (member->id == member->conference->last_video_floor_holder) { + if (conference_utils_member_test_flag(member, MFLAG_VIDEO_BRIDGE)) { + conference_utils_set_flag(member->conference, CFLAG_VID_FLOOR_LOCK); + } + } + layer = &canvas->layers[member->video_layer_id]; if (layer->geometry.audio_position) { @@ -3674,16 +3680,6 @@ void conference_video_set_floor_holder(conference_obj_t *conference, conference_ conference->last_video_floor_holder = conference->video_floor_holder; } - if (conference->last_video_floor_holder && (imember = conference_member_get(conference, conference->last_video_floor_holder))) { - switch_core_session_request_video_refresh(imember->session); - conference_video_clear_managed_kps(imember); - if (conference_utils_member_test_flag(imember, MFLAG_VIDEO_BRIDGE)) { - conference_utils_set_flag(conference, CFLAG_VID_FLOOR_LOCK); - } - switch_thread_rwlock_unlock(imember->rwlock); - imember = NULL; - } - old_member = conference->video_floor_holder; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Dropping video floor %d\n", old_member); }