diff options
author | Tony Roberts <tony@pyxll.com> | 2015-04-14 14:29:19 +0100 |
---|---|---|
committer | Tony Roberts <tony@pyxll.com> | 2015-04-14 16:33:18 +0100 |
commit | 63c0d93e449e1b47ede080efd40b4154415c1059 (patch) | |
tree | 2da39f2c34c0514132db48c0c3b28cb6d37395e7 /libpyside | |
parent | 0c64d1b2c6e5e0951675ad9b22294db4a10741c7 (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.cpp | 2 |
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); |