diff options
author | Bradley T. Hughes <bradley.hughes@nokia.com> | 2009-05-19 08:49:03 (GMT) |
---|---|---|
committer | Bradley T. Hughes <bradley.hughes@nokia.com> | 2009-05-19 08:49:03 (GMT) |
commit | c6f8b600cb1635bef425b3d2232213fb41ea96bd (patch) | |
tree | 77f384a62f76de02d9765d615966327b91e4bb4a /src/corelib/kernel | |
parent | 6cc1e0106845a0dfe9433c4413b3c064c73ccfe2 (diff) | |
parent | 9f9ede616079998f8ba7bf6fd446f39ce74b0400 (diff) | |
download | Qt-c6f8b600cb1635bef425b3d2232213fb41ea96bd.zip Qt-c6f8b600cb1635bef425b3d2232213fb41ea96bd.tar.gz Qt-c6f8b600cb1635bef425b3d2232213fb41ea96bd.tar.bz2 |
Merge branch 'master' of git@scm.dev.nokia.troll.no:qt/qt
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r-- | src/corelib/kernel/kernel.pri | 3 | ||||
-rw-r--r-- | src/corelib/kernel/qobject.cpp | 13 |
2 files changed, 11 insertions, 5 deletions
diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri index d90ecae..68649a6 100644 --- a/src/corelib/kernel/kernel.pri +++ b/src/corelib/kernel/kernel.pri @@ -53,7 +53,8 @@ SOURCES += \ kernel/qvariant.cpp \ kernel/qcoreglobaldata.cpp \ kernel/qsharedmemory.cpp \ - kernel/qsystemsemaphore.cpp + kernel/qsystemsemaphore.cpp \ + kernel/qpointer.cpp win32 { SOURCES += \ diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 287ac30..9f803fa 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -752,14 +752,18 @@ QObject::~QObject() } // disconnect all senders - for (int i = 0; i < d->senders.count(); ++i) { + for (int i = 0; i < d->senders.count(); ) { QObjectPrivate::Connection *s = d->senders[i]; - if (!s->sender) - continue; QMutex *m = &s->sender->d_func()->threadData->mutex; bool needToUnlock = QOrderedMutexLocker::relock(locker.mutex(), m); - s = d->senders[i]; + if (m < locker.mutex()) { + if (i >= d->senders.count() || s != d->senders[i]) { + if (needToUnlock) + m->unlock(); + continue; + } + } s->receiver = 0; if (s->sender) { QObjectConnectionListVector *senderLists = s->sender->d_func()->connectionLists; @@ -769,6 +773,7 @@ QObject::~QObject() if (needToUnlock) m->unlock(); + ++i; } d->senders.clear(); |