[Bf-blender-cvs] [56237f33a16] master: Fix T103101: random Cycles animation rendering freezing up the application
Brecht Van Lommel
noreply at git.blender.org
Wed Dec 14 19:57:52 CET 2022
Commit: 56237f33a16b9ec4c6f271b09b66eeabc5306e44
Author: Brecht Van Lommel
Date: Wed Dec 14 19:47:21 2022 +0100
Branches: master
https://developer.blender.org/rB56237f33a16b9ec4c6f271b09b66eeabc5306e44
Fix T103101: random Cycles animation rendering freezing up the application
===================================================================
M source/blender/render/intern/engine.cc
===================================================================
diff --git a/source/blender/render/intern/engine.cc b/source/blender/render/intern/engine.cc
index b9672246c5f..7d78f957e31 100644
--- a/source/blender/render/intern/engine.cc
+++ b/source/blender/render/intern/engine.cc
@@ -1046,14 +1046,19 @@ bool RE_engine_render(Render *re, bool do_all)
re->engine = engine;
}
- /* create render result */
+ /* Create render result. Do this before acquiring lock, to avoid lock
+ * inversion as this calls python to get the render passes, while python UI
+ * code can also hold a lock on the render result. */
+ const bool create_new_result = (re->result == nullptr || !(re->r.scemode & R_BUTS_PREVIEW));
+ RenderResult *new_result = engine_render_create_result(re);
+
BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
- if (re->result == nullptr || !(re->r.scemode & R_BUTS_PREVIEW)) {
+ if (create_new_result) {
if (re->result) {
render_result_free(re->result);
}
- re->result = engine_render_create_result(re);
+ re->result = new_result;
}
BLI_rw_mutex_unlock(&re->resultmutex);
More information about the Bf-blender-cvs
mailing list