diff options
author | Renato Filho <renato.filho@openbossa.org> | 2011-07-19 11:30:12 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:54:37 -0300 |
commit | 8ec69343969dd1ef767d9c8d38ce49d4280e5d4c (patch) | |
tree | 1ccc61abe05913d9ca888d1ec3467c0deaf56420 /libpyside/globalreceiver.cpp | |
parent | 6f872f484c587461f6203440560a665bdf76c3d8 (diff) |
Fix memory leak on GlobalReceiver.
Diffstat (limited to 'libpyside/globalreceiver.cpp')
-rw-r--r-- | libpyside/globalreceiver.cpp | 13 |
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; |