Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <jeroen@blender.org>2021-01-25 14:44:18 +0300
committerJeroen Bakker <jeroen@blender.org>2021-01-25 14:44:18 +0300
commit7a005fb7d172ba73936ad263aabd2ed7e4392688 (patch)
tree3f73ae8395c893c846c4a92c2b6cdd868195ede0 /source/blender/editors/space_image
parentdd2b616320edaffb19f9e527bcf995e3dc2ebb5a (diff)
Fix T84324: Crash when combining two scenes in compositor.
In the CompositorOperation::deinitExecution the viewer could be freed at the same time it was drawn in the image editor or node editor. There is a guard for that but wasn't added during the migration of the two editors to the draw manager.
Diffstat (limited to 'source/blender/editors/space_image')
-rw-r--r--source/blender/editors/space_image/space_image.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index d504bfbe276..776fa34d1c4 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -639,6 +639,8 @@ static void image_main_region_draw(const bContext *C, ARegion *region)
Mask *mask = NULL;
Scene *scene = CTX_data_scene(C);
View2D *v2d = &region->v2d;
+ Image *image = ED_space_image(sima);
+ const bool show_viewer = (image && image->source == IMA_SRC_VIEWER);
/* XXX not supported yet, disabling for now */
scene->r.scemode &= ~R_COMP_CROP;
@@ -653,8 +655,14 @@ static void image_main_region_draw(const bContext *C, ARegion *region)
mask = ED_space_image_get_mask(sima);
}
- /* we draw image in pixelspace */
+ if (show_viewer) {
+ BLI_thread_lock(LOCK_DRAW_IMAGE);
+ }
DRW_draw_view(C);
+ if (show_viewer) {
+ BLI_thread_unlock(LOCK_DRAW_IMAGE);
+ }
+
draw_image_main_helpers(C, region);
/* Draw Meta data of the image isn't added to the DrawManager as it is
@@ -682,12 +690,9 @@ static void image_main_region_draw(const bContext *C, ARegion *region)
UI_view2d_view_restore(C);
if (mask) {
- Image *image = ED_space_image(sima);
- int width, height, show_viewer;
+ int width, height;
float aspx, aspy;
- show_viewer = (image && image->source == IMA_SRC_VIEWER);
-
if (show_viewer) {
/* ED_space_image_get* will acquire image buffer which requires
* lock here by the same reason why lock is needed in draw_image_main