python: Ensure Python GIL state is correct during callback.
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 22 Apr 2011 21:53:07 +0000 (22:53 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 22 Apr 2011 21:53:07 +0000 (22:53 +0100)
This updates commit 2cac52000a6a96a583af72e289a4296c596047d5.

python/guestfs-py-byhand.c

index af9686f..29be83b 100644 (file)
@@ -91,6 +91,7 @@ py_guestfs_event_callback_wrapper (guestfs_h *g,
                                    const char *buf, size_t buf_len,
                                    const uint64_t *array, size_t array_len)
 {
+  PyGILState_STATE py_save = PyGILState_UNLOCKED;
   PyObject *py_callback = callback;
   PyObject *py_array;
   PyObject *args;
@@ -109,7 +110,14 @@ py_guestfs_event_callback_wrapper (guestfs_h *g,
                         (unsigned PY_LONG_LONG) event, event_handle,
                         buf, buf_len, py_array);
 
+  if (PyEval_ThreadsInitialized ())
+    py_save = PyGILState_Ensure ();
+
   py_r = PyEval_CallObject (py_callback, args);
+
+  if (PyEval_ThreadsInitialized ())
+    PyGILState_Release (py_save);
+
   Py_DECREF (args);
 
   if (py_r != NULL)