DISPATCH-2144 Remove Python lock on the router's side; use the lock Python itself created (#1521)
diff --git a/src/python_embedded.c b/src/python_embedded.c
index 79d0cc1..0fd6a45 100644
--- a/src/python_embedded.c
+++ b/src/python_embedded.c
@@ -27,7 +27,6 @@
#include "qpid/dispatch/error.h"
#include "qpid/dispatch/log.h"
#include "qpid/dispatch/router.h"
-#include "qpid/dispatch/threading.h"
#include <ctype.h>
@@ -39,8 +38,6 @@
//===============================================================================
static qd_dispatch_t *dispatch = 0;
-static sys_mutex_t *ilock = 0;
-static bool lock_held = false;
static qd_log_source_t *log_source = 0;
static PyObject *dispatch_module = 0;
static PyObject *message_type = 0;
@@ -53,7 +50,6 @@
{
log_source = qd_log_source("PYTHON");
dispatch = qd;
- ilock = sys_mutex();
if (python_pkgdir)
dispatch_python_pkgdir = PyUnicode_FromString(python_pkgdir);
@@ -63,17 +59,13 @@
#endif
qd_python_setup();
PyEval_SaveThread(); // drop the Python GIL; we will reacquire it in other threads as needed
- qd_python_lock_state_t lk = qd_python_lock();
- qd_python_setup();
- qd_python_unlock(lk);
}
void qd_python_finalize(void)
{
- (void) PyGILState_Ensure(); // not qd_python_lock(), because that function has to be paired with an _unlock
+ (void) qd_python_lock();
- sys_mutex_free(ilock);
Py_DECREF(dispatch_module);
dispatch_module = 0;
PyGC_Collect();
@@ -91,7 +83,7 @@
void qd_python_check_lock(void)
{
- assert(lock_held);
+ assert(PyGILState_Check());
}
@@ -893,16 +885,12 @@
qd_python_lock_state_t qd_python_lock(void)
{
- sys_mutex_lock(ilock);
- lock_held = true;
return PyGILState_Ensure();
}
void qd_python_unlock(qd_python_lock_state_t lock_state)
{
PyGILState_Release(lock_state);
- lock_held = false;
- sys_mutex_unlock(ilock);
}
void qd_json_msgs_init(PyObject **msgs)