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`.
This commit is contained in:
Germano Cavalcante 2021-02-24 13:54:57 -03:00
parent b0b33b77fa
commit 5dd176cde8
1 changed files with 11 additions and 4 deletions

View File

@ -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);
}
/** \} */