fix [#27683] Blender hangs when baking a particle system when a driver is present
[blender.git] / source / blender / python / intern / bpy_driver.c
index dec393bd1e4c5715ea97f8e49ac71c6419fc6b4e..bcd5df97c2ce4bb262eb2f1823e225a365bb5a1f 100644 (file)
@@ -41,6 +41,8 @@
 
 #include "bpy_driver.h"
 
+#include "../generic/py_capi_utils.h"
+
 /* for pydrivers (drivers using one-line Python expressions to express relationships between targets) */
 PyObject *bpy_pydriver_Dict= NULL;
 
@@ -87,7 +89,7 @@ int bpy_pydriver_create_dict(void)
 void BPY_driver_reset(void)
 {
        PyGILState_STATE gilstate;
-       int use_gil= 1; // (PyThreadState_Get()==NULL);
+       int use_gil= !PYC_INTERPRETER_ACTIVE;
 
        if(use_gil)
                gilstate= PyGILState_Ensure();
@@ -120,7 +122,7 @@ static void pydriver_error(ChannelDriver *driver)
  *
  * note: PyGILState_Ensure() isnt always called because python can call the
  * bake operator which intern starts a thread which calls scene update which
- * does a driver update. to avoid a deadlock check PyThreadState_Get() if PyGILState_Ensure() is needed.
+ * does a driver update. to avoid a deadlock check PYC_INTERPRETER_ACTIVE if PyGILState_Ensure() is needed.
  */
 float BPY_driver_exec(ChannelDriver *driver)
 {
@@ -147,7 +149,7 @@ float BPY_driver_exec(ChannelDriver *driver)
                return 0.0f;
        }
 
-       use_gil= 1; //(PyThreadState_Get()==NULL);
+       use_gil= !PYC_INTERPRETER_ACTIVE;
 
        if(use_gil)
                gilstate= PyGILState_Ensure();