]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10472: [mod_conference] Crash due to hangup race in conference personal canvas...
authorAnthony Minessale <anthm@freeswitch.org>
Thu, 20 Jul 2017 07:51:36 +0000 (02:51 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Thu, 20 Jul 2017 07:51:36 +0000 (02:51 -0500)
src/mod/applications/mod_conference/conference_video.c

index a0abe13d45a228b397bd863983e0f2cd3187d78d..6e9a7fafc1ce0924aae92bef5eb1c7b3e50571f7 100644 (file)
@@ -3622,7 +3622,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
                                                }
                                        }
 
-                                       if (layer) {
+                                       if (layer && !file_count) {
                                                personal_attach(layer, omember);
                                        }
 
@@ -3642,7 +3642,9 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
                                                        layer->avatar_patched = 0;
                                                } else {
                                                        if (!layer->avatar_patched) {
-                                                               conference_video_scale_and_patch(layer, omember->avatar_png_img, SWITCH_FALSE);
+                                                               if (omember->avatar_png_img) {
+                                                                       switch_img_copy(omember->avatar_png_img, &layer->cur_img);
+                                                               }
                                                                layer->avatar_patched = 1;
                                                        }
                                                        use_img = NULL;
@@ -3663,7 +3665,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
                                                                                switch_img_fit(&tmp, layer->screen_w, layer->screen_h, SWITCH_FIT_SIZE);
                                                                                //conference_video_member_video_mute_banner(imember->canvas, layer, imember);
                                                                                conference_video_member_video_mute_banner(tmp, omember);
-                                                                               conference_video_scale_and_patch(layer, tmp, SWITCH_FALSE);
+                                                                               switch_img_copy(tmp, &layer->cur_img);
                                                                        }
                                                                        
                                                                        layer->mute_patched = 1;
@@ -3689,6 +3691,8 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
                                        switch_image_t *img = file_imgs[j];
                                        layer = NULL;
 
+                                       if (!img) continue;
+
                                        if (j == 0 && imember->canvas->layout_floor_id > -1) {
                                                layer = &imember->canvas->layers[imember->canvas->layout_floor_id];
                                        } else if (i < imember->canvas->total_layers) {
@@ -3699,7 +3703,8 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
                                                switch_img_free(&layer->banner_img);
                                                switch_img_free(&layer->logo_img);
                                                layer->member_id = -1;
-                                               conference_video_scale_and_patch(layer, img, SWITCH_FALSE);
+                                               switch_img_copy(img, &layer->cur_img);
+                                               conference_video_scale_and_patch(layer, NULL, SWITCH_FALSE);
                                        }
                                }