diff options
author | Jeroen Bakker <jeroen@blender.org> | 2021-01-25 14:44:18 +0300 |
---|---|---|
committer | Jeroen Bakker <jeroen@blender.org> | 2021-01-25 14:44:18 +0300 |
commit | 7a005fb7d172ba73936ad263aabd2ed7e4392688 (patch) | |
tree | 3f73ae8395c893c846c4a92c2b6cdd868195ede0 /source/blender/editors/space_image/space_image.c | |
parent | dd2b616320edaffb19f9e527bcf995e3dc2ebb5a (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/space_image.c')
-rw-r--r-- | source/blender/editors/space_image/space_image.c | 15 |
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 = ®ion->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 |