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);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to