Pārlūkot izejas kodu

putil: grab GIL while decreffing function

rdb 4 mēneši atpakaļ
vecāks
revīzija
de4865b324
1 mainītis faili ar 11 papildinājumiem un 0 dzēšanām
  1. 11 0
      panda/src/putil/pythonCallbackObject.cxx

+ 11 - 0
panda/src/putil/pythonCallbackObject.cxx

@@ -60,7 +60,18 @@ PythonCallbackObject(PyObject *function) {
  */
 PythonCallbackObject::
 ~PythonCallbackObject() {
+  // This may be called from the cull or draw thread, so we have to be sure we
+  // own the GIL.
+#if defined(HAVE_THREADS) && !defined(SIMPLE_THREADS)
+  PyGILState_STATE gstate;
+  gstate = PyGILState_Ensure();
+#endif
+
   Py_DECREF(_function);
+
+#if defined(HAVE_THREADS) && !defined(SIMPLE_THREADS)
+  PyGILState_Release(gstate);
+#endif
 }
 
 /**