aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside
diff options
context:
space:
mode:
authorTony Roberts <tony@pyxll.com>2015-04-14 14:29:19 +0100
committerTony Roberts <tony@pyxll.com>2015-04-14 16:33:18 +0100
commit63c0d93e449e1b47ede080efd40b4154415c1059 (patch)
tree2da39f2c34c0514132db48c0c3b28cb6d37395e7 /libpyside
parent0c64d1b2c6e5e0951675ad9b22294db4a10741c7 (diff)
Fix segfault when disconnecting signal on deleted object
When disconnecting a signal on object that has been destroyed the disconnect call (Sbk_QObjectFunc_disconnect) fails and returns 0 with an error set. The calling function (signalInstanceDisconnect) was segfaulting because it decrements the reference count of the returned value. As the Python error is already set it's sufficient for signalInstanceDisconnect to return 0 in this case. Change-Id: If857961c0d64360045c1f2ba5855881e2a9aae43 Task-number: PYSIDE-189
Diffstat (limited to 'libpyside')
-rw-r--r--libpyside/pysidesignal.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/libpyside/pysidesignal.cpp b/libpyside/pysidesignal.cpp
index 40a18cd12..6d9765b46 100644
--- a/libpyside/pysidesignal.cpp
+++ b/libpyside/pysidesignal.cpp
@@ -463,7 +463,7 @@ PyObject* signalInstanceDisconnect(PyObject* self, PyObject* args)
Shiboken::AutoDecRef tupleArgs(PyList_AsTuple(pyArgs));
Shiboken::AutoDecRef pyMethod(PyObject_GetAttrString(source->d->source, "disconnect"));
PyObject* result = PyObject_CallObject(pyMethod, tupleArgs);
- if (result == Py_True)
+ if (!result || result == Py_True)
return result;
else
Py_DECREF(result);