]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10107: [mod_conference] Reduce contention on layer floor changes
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 9 Mar 2017 21:04:09 +0000 (15:04 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Thu, 9 Mar 2017 21:15:44 +0000 (15:15 -0600)
src/mod/applications/mod_conference/conference_video.c

index a75335da1f3bc95bcf6135b96ae01dad4e168d45..0a9b319bc485ab047964d857eb3381f14e93b0c8 100644 (file)
@@ -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);
                }