[Bf-blender-cvs] [6325174a753] blender-v3.4-release: Fix T103101: random Cycles animation rendering freezing up the application

Brecht Van Lommel noreply at git.blender.org
Wed Dec 14 22:45:53 CET 2022


Commit: 6325174a753fc19effb1039f1872287383fbd787
Author: Brecht Van Lommel
Date:   Wed Dec 14 19:47:21 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB6325174a753fc19effb1039f1872287383fbd787

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 acca657f7dc..f8fa20387fe 100644
--- a/source/blender/render/intern/engine.cc
+++ b/source/blender/render/intern/engine.cc
@@ -1044,14 +1044,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