aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside/globalreceiver.cpp
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2011-07-19 11:30:12 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:54:37 -0300
commit8ec69343969dd1ef767d9c8d38ce49d4280e5d4c (patch)
tree1ccc61abe05913d9ca888d1ec3467c0deaf56420 /libpyside/globalreceiver.cpp
parent6f872f484c587461f6203440560a665bdf76c3d8 (diff)
Fix memory leak on GlobalReceiver.
Diffstat (limited to 'libpyside/globalreceiver.cpp')
-rw-r--r--libpyside/globalreceiver.cpp13
1 files changed, 7 insertions, 6 deletions
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<int, DynamicSlotData*>::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;