diff --git a/python/handle.c b/python/handle.c index ffd0794d8..659bb5b06 100644 --- a/python/handle.c +++ b/python/handle.c @@ -112,13 +112,17 @@ guestfs_int_py_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; + PyGILState_STATE py_save; PyObject *py_callback = callback; PyObject *py_array; PyObject *args; PyObject *a; size_t i; PyObject *py_r; + int threads_initialized = PyEval_ThreadsInitialized (); + + if (threads_initialized) + py_save = PyGILState_Ensure (); py_array = PyList_New (array_len); for (i = 0; i < array_len; ++i) { @@ -132,14 +136,8 @@ guestfs_int_py_event_callback_wrapper (guestfs_h *g, buf, buf_len, py_array); Py_INCREF (args); - if (PyEval_ThreadsInitialized ()) - py_save = PyGILState_Ensure (); - py_r = PyObject_CallObject (py_callback, args); - if (PyEval_ThreadsInitialized ()) - PyGILState_Release (py_save); - Py_DECREF (args); if (py_r != NULL) @@ -147,6 +145,9 @@ guestfs_int_py_event_callback_wrapper (guestfs_h *g, else /* Callback threw an exception: print it. */ PyErr_PrintEx (0); + + if (threads_initialized) + PyGILState_Release (py_save); } PyObject *