summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp45
-rw-r--r--src/corelib/kernel/qcoreapplication_p.h5
-rw-r--r--src/corelib/kernel/qeventloop.cpp9
-rw-r--r--src/corelib/kernel/qobject.cpp13
-rw-r--r--src/corelib/kernel/qtranslator.cpp1
-rw-r--r--src/corelib/thread/qthread.cpp15
-rw-r--r--src/corelib/thread/qthread_p.h7
-rw-r--r--src/corelib/thread/qthread_unix.cpp2
-rw-r--r--src/corelib/thread/qthread_win.cpp1
9 files changed, 17 insertions, 81 deletions
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 6d860bc1e7c..635c69912b1 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -115,10 +115,6 @@
QT_BEGIN_NAMESPACE
-#ifndef QT_NO_QOBJECT
-Q_LOGGING_CATEGORY(lcDeleteLater, "qt.core.qobject.deletelater")
-#endif
-
using namespace Qt::StringLiterals;
Q_TRACE_PREFIX(qtcore,
@@ -1481,8 +1477,6 @@ void QCoreApplicationPrivate::execCleanup()
{
threadData.loadRelaxed()->quitNow = false;
in_exec = false;
-
- qCDebug(lcDeleteLater) << "Sending deferred delete events as part of exec cleanup";
QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
}
@@ -1853,37 +1847,16 @@ void QCoreApplicationPrivate::sendPostedEvents(QObject *receiver, int event_type
// events posted by the current event loop; or
// 3) if the event was posted before the outermost event loop.
- const auto *event = static_cast<QDeferredDeleteEvent *>(pe.event);
- qCDebug(lcDeleteLater) << "Processing deferred delete event for" << pe.receiver
- << "with loop level" << event->loopLevel() << "and scope level" << event->scopeLevel();
-
- qCDebug(lcDeleteLater) << "Checking" << data->thread << "with loop level"
- << data->loopLevel << "and scope level" << data->scopeLevel;
-
- bool allowDeferredDelete = false;
- if (event->loopLevel() == 0 && data->loopLevel > 0) {
- qCDebug(lcDeleteLater) << "Event was posted outside outermost event loop"
- << "and current thread has an event loop running.";
- allowDeferredDelete = true;
- } else {
- const int totalEventLevel = event->loopLevel() + event->scopeLevel();
- const int totalThreadLevel = data->loopLevel + data->scopeLevel;
-
- if (totalEventLevel > totalThreadLevel) {
- qCDebug(lcDeleteLater) << "Combined levels of event" << totalEventLevel
- << "is higher than thread" << totalThreadLevel;
- allowDeferredDelete = true;
- } else if (event_type == QEvent::DeferredDelete && totalEventLevel == totalThreadLevel) {
- qCDebug(lcDeleteLater) << "Explicit send of DeferredDelete and"
- << "levels of event" << totalEventLevel
- << "is same as thread" << totalThreadLevel;
- allowDeferredDelete = true;
- }
- }
+ const int eventLoopLevel = static_cast<QDeferredDeleteEvent *>(pe.event)->loopLevel();
+ const int eventScopeLevel = static_cast<QDeferredDeleteEvent *>(pe.event)->scopeLevel();
+ const bool postedBeforeOutermostLoop = eventLoopLevel == 0;
+ const bool allowDeferredDelete =
+ (eventLoopLevel + eventScopeLevel > data->loopLevel + data->scopeLevel
+ || (postedBeforeOutermostLoop && data->loopLevel > 0)
+ || (event_type == QEvent::DeferredDelete
+ && eventLoopLevel + eventScopeLevel == data->loopLevel + data->scopeLevel));
if (!allowDeferredDelete) {
- qCDebug(lcDeleteLater) << "Failed conditions for deferred delete. Deferring again";
-
// cannot send deferred delete
if (!event_type && !receiver) {
// we must copy it first; we want to re-post the event
@@ -1900,8 +1873,6 @@ void QCoreApplicationPrivate::sendPostedEvents(QObject *receiver, int event_type
data->postEventList.addEvent(pe_copy);
}
continue;
- } else {
- qCDebug(lcDeleteLater) << "Sending deferred delete to" << pe.receiver;
}
}
diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h
index a1e0e4d560a..ed18df4e72f 100644
--- a/src/corelib/kernel/qcoreapplication_p.h
+++ b/src/corelib/kernel/qcoreapplication_p.h
@@ -25,7 +25,6 @@
#include "QtCore/qsettings.h"
#endif
#ifndef QT_NO_QOBJECT
-#include <qloggingcategory.h>
#include "private/qobject_p.h"
#include "private/qlocking_p.h"
#endif
@@ -36,10 +35,6 @@
QT_BEGIN_NAMESPACE
-#ifndef QT_NO_QOBJECT
-Q_DECLARE_LOGGING_CATEGORY(lcDeleteLater)
-#endif
-
typedef QList<QTranslator*> QTranslatorList;
class QAbstractEventDispatcher;
diff --git a/src/corelib/kernel/qeventloop.cpp b/src/corelib/kernel/qeventloop.cpp
index 500b67ea6ae..c02afd172dc 100644
--- a/src/corelib/kernel/qeventloop.cpp
+++ b/src/corelib/kernel/qeventloop.cpp
@@ -155,9 +155,6 @@ int QEventLoop::exec(ProcessEventsFlags flags)
auto threadData = d->threadData.loadRelaxed();
++threadData->loopLevel;
threadData->eventLoops.push(d->q_func());
- qCDebug(lcDeleteLater) << "Increased" << threadData->thread
- << "loop level to" << threadData->loopLevel
- << "with leaf loop now" << threadData->eventLoops.last();
locker.unlock();
}
@@ -176,12 +173,6 @@ int QEventLoop::exec(ProcessEventsFlags flags)
Q_UNUSED(eventLoop); // --release warning
d->inExec = false;
--threadData->loopLevel;
-
- qCDebug(lcDeleteLater) << "Decreased" << threadData->thread
- << "loop level to" << threadData->loopLevel
- << "with leaf loop now" << (threadData->eventLoops.isEmpty()
- ? nullptr : threadData->eventLoops.last());
-
}
};
LoopReference ref(d, locker);
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 7c179c4bde5..2a419aabf8e 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -1413,7 +1413,6 @@ bool QObject::event(QEvent *e)
break;
case QEvent::DeferredDelete:
- qCDebug(lcDeleteLater) << "Deferred deleting" << this;
delete this;
break;
@@ -2464,10 +2463,8 @@ void QObject::deleteLater()
// as long as we're not guarding every access to the bit field.
Q_D(QObject);
- if (d->deleteLaterCalled) {
- qCDebug(lcDeleteLater) << "Skipping deleteLater for already deferred object" << this;
+ if (d->deleteLaterCalled)
return;
- }
d->deleteLaterCalled = true;
@@ -2493,16 +2490,10 @@ void QObject::deleteLater()
// non-conformant code path, and our best guess is that the scope level
// should be 1. (Loop level 0 is special: it means that no event loops
// are running.)
- if (scopeLevel == 0 && loopLevel != 0) {
- qCDebug(lcDeleteLater) << "Delete later called with scope level 0"
- << "but loop level is > 0. Assuming scope is 1";
+ if (scopeLevel == 0 && loopLevel != 0)
scopeLevel = 1;
- }
}
- qCDebug(lcDeleteLater) << "Posting deferred delete for" << this
- << "with loop level" << loopLevel << "and scope level" << scopeLevel;
-
eventListLocker.unlock();
QCoreApplication::postEvent(this,
new QDeferredDeleteEvent(loopLevel, scopeLevel));
diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp
index f3846e38c23..713c029c347 100644
--- a/src/corelib/kernel/qtranslator.cpp
+++ b/src/corelib/kernel/qtranslator.cpp
@@ -19,6 +19,7 @@
#include "qtranslator_p.h"
#include "qlocale.h"
#include "qlogging.h"
+#include "qloggingcategory.h"
#include "qdebug.h"
#include "qendian.h"
#include "qresource.h"
diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp
index 08e8368043e..b5b4618e0bd 100644
--- a/src/corelib/thread/qthread.cpp
+++ b/src/corelib/thread/qthread.cpp
@@ -131,21 +131,6 @@ void QAdoptedThread::run()
}
#endif
-QScopedScopeLevelCounter::QScopedScopeLevelCounter(QThreadData *threadData)
- : threadData(threadData)
-{
- ++threadData->scopeLevel;
- qCDebug(lcDeleteLater) << "Increased" << threadData->thread
- << "scope level to" << threadData->scopeLevel;
-}
-
-QScopedScopeLevelCounter::~QScopedScopeLevelCounter()
-{
- --threadData->scopeLevel;
- qCDebug(lcDeleteLater) << "Decreased" << threadData->thread
- << "scope level to" << threadData->scopeLevel;
-}
-
#if QT_CONFIG(thread)
/*
QThreadPrivate
diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h
index eb721509776..547c2867f16 100644
--- a/src/corelib/thread/qthread_p.h
+++ b/src/corelib/thread/qthread_p.h
@@ -379,8 +379,11 @@ class QScopedScopeLevelCounter
{
QThreadData *threadData;
public:
- QScopedScopeLevelCounter(QThreadData *threadData);
- ~QScopedScopeLevelCounter();
+ inline QScopedScopeLevelCounter(QThreadData *threadData)
+ : threadData(threadData)
+ { ++threadData->scopeLevel; }
+ inline ~QScopedScopeLevelCounter()
+ { --threadData->scopeLevel; }
};
// thread wrapper for the main() thread
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index fc9ab3aa1a6..15851a6046b 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -8,6 +8,7 @@
#include <private/qcoreapplication_p.h>
#include <private/qcore_unix_p.h>
#include "qdebug.h"
+#include "qloggingcategory.h"
#include "qthreadstorage.h"
#include <private/qtools_p.h>
@@ -404,7 +405,6 @@ void QThreadPrivate::finish()
d->threadState = QThreadPrivate::Finishing;
locker.unlock();
emit thr->finished(QThread::QPrivateSignal());
- qCDebug(lcDeleteLater) << "Sending deferred delete events as part of finishing thread" << thr;
QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
void *data = &d->data->tls;
diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp
index 8b902ec2cd6..137a609107a 100644
--- a/src/corelib/thread/qthread_win.cpp
+++ b/src/corelib/thread/qthread_win.cpp
@@ -230,7 +230,6 @@ void QThreadPrivate::finish(bool lockAnyway) noexcept
if (lockAnyway)
locker.unlock();
emit thr->finished(QThread::QPrivateSignal());
- qCDebug(lcDeleteLater) << "Sending deferred delete events as part of finishing thread" << thr;
QCoreApplicationPrivate::sendPostedEvents(nullptr, QEvent::DeferredDelete, d->data);
QThreadStorageData::finish(tls_data);
if (lockAnyway)