[Bf-blender-cvs] [5dd176cde8a] master: PyAPI: Ensure GIL state only when a callback exists

Germano Cavalcante noreply at git.blender.org
Wed Feb 24 17:57:29 CET 2021


Commit: 5dd176cde8aa04132e9ffaa02c95ccf1022bc217
Author: Germano Cavalcante
Date:   Wed Feb 24 13:54:57 2021 -0300
Branches: master
https://developer.blender.org/rB5dd176cde8aa04132e9ffaa02c95ccf1022bc217

PyAPI: Ensure GIL state only when a callback exists

There are fewer python callbacks than `ARegionType`s.

This also broke GTests's `bf_blenderloader_tests`.

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

M	source/blender/python/intern/bpy_rna_callback.c

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

diff --git a/source/blender/python/intern/bpy_rna_callback.c b/source/blender/python/intern/bpy_rna_callback.c
index fdd3cb363ea..7f8ea54ab98 100644
--- a/source/blender/python/intern/bpy_rna_callback.c
+++ b/source/blender/python/intern/bpy_rna_callback.c
@@ -495,21 +495,28 @@ PyObject *pyrna_callback_classmethod_remove(PyObject *UNUSED(self), PyObject *ar
 static void cb_customdata_free(void *customdata)
 {
   PyObject *tuple = customdata;
+  bool use_gil = true; /* !PyC_IsInterpreterActive(); */
+
+  PyGILState_STATE gilstate;
+  if (use_gil) {
+    gilstate = PyGILState_Ensure();
+  }
+
   Py_DECREF(tuple);
+
+  if (use_gil) {
+    PyGILState_Release(gilstate);
+  }
 }
 
 void BPY_callback_screen_free(struct ARegionType *art)
 {
-  PyGILState_STATE gilstate = PyGILState_Ensure();
   ED_region_draw_cb_remove_by_type(art, cb_region_draw, cb_customdata_free);
-  PyGILState_Release(gilstate);
 }
 
 void BPY_callback_wm_free(struct wmWindowManager *wm)
 {
-  PyGILState_STATE gilstate = PyGILState_Ensure();
   WM_paint_cursor_remove_by_type(wm, cb_wm_cursor_draw, cb_customdata_free);
-  PyGILState_Release(gilstate);
 }
 
 /** \} */



More information about the Bf-blender-cvs mailing list