diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-06-14 13:01:18 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-06-14 13:03:40 +0300 |
commit | d64cd6f7ee6322685c485b68118f8e987723f20b (patch) | |
tree | 9994f34a680eb7defc54200e942e4c7b4d733b63 /source/blender/draw | |
parent | 17b029d80efaf51df55cd1133718d1cf69aa244f (diff) |
Move call to drw_state_ensure_not_reused() inside the region locked by DST.gl_context_mutex.
Currently with a debug build there is a race condition where the mutex is released before the DST structure is reset to 0xFF, meaning when multiple threads are using the DRWManager it can get cleared when the main thread is using it, causing crashes.
Reviewers: fclem, brecht
Reviewed By: fclem
Tags: #bf_blender_2.8
Differential Revision: https://developer.blender.org/D3476
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 4991f325e13..a91b9fad35e 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -1548,6 +1548,11 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph) GPU_viewport_free(DST.viewport); GPU_framebuffer_restore(); +#ifdef DEBUG + /* Avoid accidental reuse. */ + drw_state_ensure_not_reused(&DST); +#endif + /* Changing Context */ if (re_gl_context != NULL) { DRW_shape_cache_reset(); /* XXX fix that too. */ @@ -1560,11 +1565,6 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph) else { DRW_opengl_context_disable(); } - -#ifdef DEBUG - /* Avoid accidental reuse. */ - drw_state_ensure_not_reused(&DST); -#endif } void DRW_render_object_iter( |