You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2014/12/17 17:45:30 UTC
svn commit: r1646292 - in /qpid/dispatch/trunk:
include/qpid/dispatch/python_embedded.h src/error.c src/python_embedded.c
src/router_pynode.c
Author: tross
Date: Wed Dec 17 16:45:30 2014
New Revision: 1646292
URL: http://svn.apache.org/r1646292
Log:
DISPATCH-88 - Added asserts to check the python lock. Fixed instance of python calls with the lock not held.
Modified:
qpid/dispatch/trunk/include/qpid/dispatch/python_embedded.h
qpid/dispatch/trunk/src/error.c
qpid/dispatch/trunk/src/python_embedded.c
qpid/dispatch/trunk/src/router_pynode.c
Modified: qpid/dispatch/trunk/include/qpid/dispatch/python_embedded.h
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/include/qpid/dispatch/python_embedded.h?rev=1646292&r1=1646291&r2=1646292&view=diff
==============================================================================
--- qpid/dispatch/trunk/include/qpid/dispatch/python_embedded.h (original)
+++ qpid/dispatch/trunk/include/qpid/dispatch/python_embedded.h Wed Dec 17 16:45:30 2014
@@ -79,5 +79,6 @@ PyObject *qd_field_to_py(qd_parsed_field
typedef PyGILState_STATE qd_python_lock_state_t;
qd_python_lock_state_t qd_python_lock(void);
void qd_python_unlock(qd_python_lock_state_t state);
+void qd_python_check_lock(void);
#endif
Modified: qpid/dispatch/trunk/src/error.c
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/error.c?rev=1646292&r1=1646291&r2=1646292&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/error.c (original)
+++ qpid/dispatch/trunk/src/error.c Wed Dec 17 16:45:30 2014
@@ -21,6 +21,7 @@
#include <qpid/dispatch/error.h>
#include <qpid/dispatch/enum.h>
#include <qpid/dispatch/log.h>
+#include <qpid/dispatch/python_embedded.h>
#include <stdarg.h>
#include <stdio.h>
#include <errno.h>
@@ -144,6 +145,7 @@ static void log_trace_py(PyObject *type,
}
qd_error_t qd_error_py_impl(const char *file, int line) {
+ qd_python_check_lock();
if (PyErr_Occurred()) {
PyObject *type, *value, *trace;
PyErr_Fetch(&type, &value, &trace); /* Note clears the python error indicator */
Modified: qpid/dispatch/trunk/src/python_embedded.c
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/python_embedded.c?rev=1646292&r1=1646291&r2=1646292&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/python_embedded.c (original)
+++ qpid/dispatch/trunk/src/python_embedded.c Wed Dec 17 16:45:30 2014
@@ -34,6 +34,7 @@
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;
@@ -74,6 +75,12 @@ PyObject *qd_python_module(void)
}
+void qd_python_check_lock(void)
+{
+ assert(lock_held);
+}
+
+
//===============================================================================
// Data Conversion Functions
//===============================================================================
@@ -120,6 +127,7 @@ static PyObject *parsed_to_py_string(qd_
qd_error_t qd_py_to_composed(PyObject *value, qd_composed_field_t *field)
{
+ qd_python_check_lock();
qd_error_clear();
if (value == Py_None) {
qd_compose_insert_null(field);
@@ -195,6 +203,7 @@ qd_error_t qd_py_to_composed(PyObject *v
void qd_py_attr_to_composed(PyObject *object, const char *attr, qd_composed_field_t *field)
{
+ qd_python_check_lock();
PyObject *value = PyObject_GetAttrString(object, attr);
if (value) {
qd_py_to_composed(value, field);
@@ -207,6 +216,7 @@ void qd_py_attr_to_composed(PyObject *ob
PyObject *qd_field_to_py(qd_parsed_field_t *field)
{
+ qd_python_check_lock();
PyObject *result = 0;
uint8_t tag = qd_parse_tag(field);
switch (tag) {
@@ -734,10 +744,12 @@ static void qd_python_setup(void)
qd_python_lock_state_t qd_python_lock(void)
{
sys_mutex_lock(ilock);
+ lock_held = true;
return 0;
}
void qd_python_unlock(qd_python_lock_state_t lock_state)
{
+ lock_held = false;
sys_mutex_unlock(ilock);
}
Modified: qpid/dispatch/trunk/src/router_pynode.c
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/router_pynode.c?rev=1646292&r1=1646291&r2=1646292&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/router_pynode.c (original)
+++ qpid/dispatch/trunk/src/router_pynode.c Wed Dec 17 16:45:30 2014
@@ -626,6 +626,7 @@ void qd_router_python_free(qd_router_t *
qd_error_t qd_pyrouter_tick(qd_router_t *router)
{
qd_error_clear();
+ qd_error_t err = QD_ERROR_NONE;
PyObject *pArgs;
PyObject *pValue;
@@ -636,9 +637,10 @@ qd_error_t qd_pyrouter_tick(qd_router_t
pValue = PyObject_CallObject(pyTick, pArgs);
Py_DECREF(pArgs);
Py_XDECREF(pValue);
+ err = qd_error_py();
qd_python_unlock(lock_state);
}
- return qd_error_py();
+ return err;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org