aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2010-06-29 17:55:23 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2010-06-29 17:55:23 -0300
commit9ee7d00d11693fff3cebf6db0d3d5b18ed8666fb (patch)
tree21ab765c6522e07bb894a3df0068f6653a10d743 /libpyside
parent4c6e35634c220a9bc64b33db41a80360a3bc6e18 (diff)
Fix reference leak in PySide::signalUpdateSource.
Diffstat (limited to 'libpyside')
-rw-r--r--libpyside/qsignal.cpp11
1 files changed, 5 insertions, 6 deletions
diff --git a/libpyside/qsignal.cpp b/libpyside/qsignal.cpp
index 43c02f1cd..aa211a720 100644
--- a/libpyside/qsignal.cpp
+++ b/libpyside/qsignal.cpp
@@ -228,16 +228,15 @@ PyObject* signal_instance_get_item(PyObject* self, PyObject* key)
void signalUpdateSource(PyObject* source)
{
- PyObject* attrs = PyObject_Dir(source);
- for(int i = 0, i_max = PyList_Size(attrs); i < i_max; i++) {
- PyObject *attrName = PyList_GET_ITEM(attrs, i);
- PyObject *attr = PyObject_GetAttr(source, attrName);
+ Shiboken::AutoDecRef attrs(PyObject_Dir(source));
+ for(int i = 0, i_max = PyList_GET_SIZE(attrs.object()); i < i_max; i++) {
+ PyObject *attrName = PyList_GET_ITEM(attrs.object(), i);
+ Shiboken::AutoDecRef attr(PyObject_GetAttr(source, attrName));
if (attr->ob_type == &Signal_Type) {
Shiboken::AutoDecRef signalInstance(reinterpret_cast<PyObject*>(PyObject_New(SignalInstanceData, &SignalInstance_Type)));
- signal_instance_initialize(signalInstance, attrName, reinterpret_cast<SignalData*>(attr), source, 0);
+ signal_instance_initialize(signalInstance, attrName, reinterpret_cast<SignalData*>(attr.object()), source, 0);
PyObject_SetAttr(source, attrName, signalInstance);
}
- Py_DECREF(attr);
}
}