]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-8615 #resolve [Crash when quickly changing layouts and setting reservation ids.]
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 4 Dec 2015 19:07:50 +0000 (13:07 -0600)
committerBrian West <brian@freeswitch.org>
Fri, 4 Dec 2015 19:08:02 +0000 (13:08 -0600)
src/mod/applications/mod_conference/conference_api.c
src/mod/applications/mod_conference/conference_video.c

index dc9d683e7e668cc626602ed626320585cd567f74..93ca89baa9b149867ea6348680f132c2a8eb8e3d 100644 (file)
@@ -1583,10 +1583,9 @@ switch_status_t conference_api_sub_vid_res_id(conference_member_t *member, switc
        } else {
                member->video_reservation_id = switch_core_strdup(member->pool, text);
                stream->write_function(stream, "+OK reservation_id %s\n", text);
+               conference_video_detach_video_layer(member);
        }
 
-       conference_video_detach_video_layer(member);
-
        return SWITCH_STATUS_SUCCESS;
 
 }
index 6a16604226840b23e7be18a30e147639560d83f0..dfece45d97743b1e5726ef7dfad0488897f78fc2 100644 (file)
@@ -615,14 +615,19 @@ void conference_video_detach_video_layer(conference_member_t *member)
        mcu_layer_t *layer = NULL;
        mcu_canvas_t *canvas = NULL;
 
-       if (member->canvas_id < 0 || member->video_layer_id < 0) return;
-
+       if (member->canvas_id < 0) return;
+       
        if (!(canvas = conference_video_get_canvas_locked(member))) {
                return;
        }
 
        switch_mutex_lock(canvas->mutex);
 
+       if (member->video_layer_id < 0) {
+               switch_mutex_unlock(canvas->mutex);
+               return;
+       }
+       
        layer = &canvas->layers[member->video_layer_id];
 
        if (layer->geometry.audio_position) {