diff options
author | Roger Hu <roger.hu@gmail.com> | 2014-06-16 07:55:36 -0700 |
---|---|---|
committer | Ask Solem <ask@celeryproject.org> | 2015-10-30 12:15:48 -0700 |
commit | 948e2bfea9d496299e0e1cb1be01cb4358263c38 (patch) | |
tree | cb737d83f74d7d2c9e97d0559c54d13d54e834ba | |
parent | 612211932b0cec65642fd8e47b7bb3f563eef14a (diff) | |
download | librabbitmq-948e2bfea9d496299e0e1cb1be01cb4358263c38.tar.gz |
Check if the return value is -1. If so, goto fail, which will invoke PyErr_Ocurred().
https://docs.python.org/2/c-api/int.html
https://docs.python.org/2/c-api/float.html
Somehow runnning PyErr_Ocurred() when no exception has been generated triggers an unknown thread state and
seg faults.
-rw-r--r-- | Modules/_librabbitmq/connection.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/Modules/_librabbitmq/connection.c b/Modules/_librabbitmq/connection.c index af52cd4..2ca4933 100644 --- a/Modules/_librabbitmq/connection.c +++ b/Modules/_librabbitmq/connection.c @@ -292,8 +292,10 @@ PyDict_ToAMQTable(amqp_connection_state_t conn, PyObject *src, amqp_pool_t *pool else if (PyLong_Check(dvalue) || PyInt_Check(dvalue)) { /* Int | Long */ clong_value = (int64_t)PyLong_AsLong(dvalue); - if (PyErr_Occurred()) - goto error; + + if (clong_value == -1) + goto error; + AMQTable_SetIntValue(&dst, PyString_AS_AMQBYTES(dkey), clong_value @@ -301,8 +303,10 @@ PyDict_ToAMQTable(amqp_connection_state_t conn, PyObject *src, amqp_pool_t *pool } else if (PyFloat_Check(dvalue)) { cdouble_value = PyFloat_AsDouble(dvalue); - if (PyErr_Occurred()) - goto error; + + if (cdouble_value == -1) + goto error; + AMQTable_SetDoubleValue(&dst, PyString_AS_AMQBYTES(dkey), cdouble_value |