From 8ec69343969dd1ef767d9c8d38ce49d4280e5d4c Mon Sep 17 00:00:00 2001 From: Renato Filho Date: Tue, 19 Jul 2011 11:30:12 -0300 Subject: Fix memory leak on GlobalReceiver. --- libpyside/globalreceiver.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'libpyside') diff --git a/libpyside/globalreceiver.cpp b/libpyside/globalreceiver.cpp index 59b8b5332..89902126c 100644 --- a/libpyside/globalreceiver.cpp +++ b/libpyside/globalreceiver.cpp @@ -45,7 +45,7 @@ class DynamicSlotData void addRef(const QObject* o); void decRef(const QObject* o); void clear(); - bool hasRefTo(const QObject* o) const; + int hasRefTo(const QObject* o) const; int refCount() const; int id() const; PyObject* call(PyObject* args); @@ -122,11 +122,9 @@ int DynamicSlotData::id() const return m_id; } -bool DynamicSlotData::hasRefTo(const QObject *o) const +int DynamicSlotData::hasRefTo(const QObject *o) const { - if (m_refs.size()) - return m_refs.contains(o); - return false; + return m_refs.count(o); } void DynamicSlotData::clear() @@ -261,8 +259,11 @@ int GlobalReceiver::qt_metacall(QMetaObject::Call call, int id, void** args) QHash::iterator i = copy.begin(); while(i != copy.end()) { //Remove all refs - while (i.value()->hasRefTo(arg)) + int refs = i.value()->hasRefTo(arg); + while(refs) { disconnectNotify(arg, i.key()); + refs--; + } i++; } return -1; -- cgit v1.2.3