From ce1cadcacf01f4428f0f247dcd34ffdc38c9184e Mon Sep 17 00:00:00 2001 From: Renato Araujo Oliveira Filho Date: Tue, 23 Nov 2010 11:34:11 -0300 Subject: Fixed GlobalReceiver destructor. Reviewer: Luciano Wolf Hugo Parente Lima --- libpyside/globalreceiver.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'libpyside') 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::iterator i = m_slotReceivers.begin(); - while(i != m_slotReceivers.end()) { + //avoid hash changes during the destruction + QHash copy = m_slotReceivers; + QHash::iterator i = copy.begin(); + while(i != copy.end()) { if (i.value()->hasRefTo(arg)) { disconnectNotify(arg, i.key()); break; -- cgit v1.2.3