[Bf-blender-cvs] [0c5d8f4ea55] cycles_texture_cache: Fix T85287: Cycles deadlock loading Blender images in some cases

Brecht Van Lommel noreply at git.blender.org
Thu May 6 11:25:39 CEST 2021


Commit: 0c5d8f4ea5580124aa3a32a16cbeb06aa9263863
Author: Brecht Van Lommel
Date:   Mon May 3 21:18:48 2021 +0200
Branches: cycles_texture_cache
https://developer.blender.org/rB0c5d8f4ea5580124aa3a32a16cbeb06aa9263863

Fix T85287: Cycles deadlock loading Blender images in some cases

===================================================================

M	intern/cycles/blender/blender_python.cpp

===================================================================

diff --git a/intern/cycles/blender/blender_python.cpp b/intern/cycles/blender/blender_python.cpp
index c4fbc62df43..0e9f194d3e5 100644
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@ -36,6 +36,7 @@
 #include "util/util_path.h"
 #include "util/util_string.h"
 #include "util/util_task.h"
+#include "util/util_tbb.h"
 #include "util/util_types.h"
 
 #ifdef WITH_OSL
@@ -289,9 +290,11 @@ static PyObject *render_func(PyObject * /*self*/, PyObject *args)
   RNA_pointer_create(NULL, &RNA_Depsgraph, (ID *)PyLong_AsVoidPtr(pydepsgraph), &depsgraphptr);
   BL::Depsgraph b_depsgraph(depsgraphptr);
 
+  /* Allow Blender to execute other Python scripts, and isolate TBB tasks so we
+   * don't get deadlocks with Blender threads accessing shared data like images. */
   python_thread_state_save(&session->python_thread_state);
 
-  session->render(b_depsgraph);
+  tbb::this_task_arena::isolate([&] { session->render(b_depsgraph); });
 
   python_thread_state_restore(&session->python_thread_state);
 
@@ -328,7 +331,8 @@ static PyObject *bake_func(PyObject * /*self*/, PyObject *args)
 
   python_thread_state_save(&session->python_thread_state);
 
-  session->bake(b_depsgraph, b_object, pass_type, pass_filter, width, height);
+  tbb::this_task_arena::isolate(
+      [&] { session->bake(b_depsgraph, b_object, pass_type, pass_filter, width, height); });
 
   python_thread_state_restore(&session->python_thread_state);
 
@@ -374,7 +378,7 @@ static PyObject *reset_func(PyObject * /*self*/, PyObject *args)
 
   python_thread_state_save(&session->python_thread_state);
 
-  session->reset_session(b_data, b_depsgraph);
+  tbb::this_task_arena::isolate([&] { session->reset_session(b_data, b_depsgraph); });
 
   python_thread_state_restore(&session->python_thread_state);
 
@@ -396,7 +400,7 @@ static PyObject *sync_func(PyObject * /*self*/, PyObject *args)
 
   python_thread_state_save(&session->python_thread_state);
 
-  session->synchronize(b_depsgraph);
+  tbb::this_task_arena::isolate([&] { session->synchronize(b_depsgraph); });
 
   python_thread_state_restore(&session->python_thread_state);



More information about the Bf-blender-cvs mailing list