summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorBradley T. Hughes <bradley.hughes@nokia.com>2009-05-19 08:49:03 (GMT)
committerBradley T. Hughes <bradley.hughes@nokia.com>2009-05-19 08:49:03 (GMT)
commitc6f8b600cb1635bef425b3d2232213fb41ea96bd (patch)
tree77f384a62f76de02d9765d615966327b91e4bb4a /src/corelib/kernel
parent6cc1e0106845a0dfe9433c4413b3c064c73ccfe2 (diff)
parent9f9ede616079998f8ba7bf6fd446f39ce74b0400 (diff)
downloadQt-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.pri3
-rw-r--r--src/corelib/kernel/qobject.cpp13
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();