diff options
author | Renato Araujo Oliveira Filho <renato.filho@openbossa.org> | 2010-11-23 11:34:11 -0300 |
---|---|---|
committer | Renato Araujo Oliveira Filho <renato.filho@openbossa.org> | 2010-11-23 11:53:15 -0300 |
commit | ce1cadcacf01f4428f0f247dcd34ffdc38c9184e (patch) | |
tree | aed3c1cc4bcc11a0214be385a965fb75646a7dbe /libpyside | |
parent | 276f260f65e07dfb9778ba8d069f18e070852528 (diff) |
Fixed GlobalReceiver destructor.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Hugo Parente Lima <hugo.pl@gmail.com>
Diffstat (limited to 'libpyside')
-rw-r--r-- | libpyside/globalreceiver.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/libpyside/globalreceiver.cpp b/libpyside/globalreceiver.cpp index 2c126044e..d63ebdf66 100644 --- a/libpyside/globalreceiver.cpp +++ b/libpyside/globalreceiver.cpp @@ -116,7 +116,8 @@ GlobalReceiver::GlobalReceiver() GlobalReceiver::~GlobalReceiver() { - foreach(DynamicSlotData* data, m_slotReceivers) { + while(!m_slotReceivers.empty()) { + DynamicSlotData* data = m_slotReceivers.take(m_slotReceivers.begin().key()); data->clear(); delete data; } @@ -203,8 +204,10 @@ int GlobalReceiver::qt_metacall(QMetaObject::Call call, int id, void** args) if (strcmp(slot.signature(), RECEIVER_DESTROYED_SLOT_NAME) == 0) { QObject *arg = *(QObject**)args[1]; - QHash<int, DynamicSlotData*>::iterator i = m_slotReceivers.begin(); - while(i != m_slotReceivers.end()) { + //avoid hash changes during the destruction + QHash<int, DynamicSlotData*> copy = m_slotReceivers; + QHash<int, DynamicSlotData*>::iterator i = copy.begin(); + while(i != copy.end()) { if (i.value()->hasRefTo(arg)) { disconnectNotify(arg, i.key()); break; |