diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index e1200743868..48c75973f7f 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, @@ -1535,8 +1531,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); } @@ -1901,37 +1895,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(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(pe.event)->loopLevel(); + const int eventScopeLevel = static_cast(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 @@ -1948,8 +1921,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 bfd65d2c9a0..0a51a0b5de8 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 #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 QTranslatorList; class QAbstractEventDispatcher; diff --git a/src/corelib/kernel/qeventloop.cpp b/src/corelib/kernel/qeventloop.cpp index 2d401e7a425..2b68e47d053 100644 --- a/src/corelib/kernel/qeventloop.cpp +++ b/src/corelib/kernel/qeventloop.cpp @@ -154,9 +154,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(); } @@ -175,12 +172,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 45f85fbdc65..1e5b44b6393 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -1400,7 +1400,6 @@ bool QObject::event(QEvent *e) break; case QEvent::DeferredDelete: - qCDebug(lcDeleteLater) << "Deferred deleting" << this; delete this; break; @@ -2451,10 +2450,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; @@ -2480,16 +2477,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 44c8f9b18d1..9b862358269 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 37555864e89..0c95a58d895 100644 --- a/src/corelib/thread/qthread.cpp +++ b/src/corelib/thread/qthread.cpp @@ -133,21 +133,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 abd789eab6d..b8e65e4aee2 100644 --- a/src/corelib/thread/qthread_p.h +++ b/src/corelib/thread/qthread_p.h @@ -352,8 +352,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 36112afd4df..e81cd4ef880 100644 --- a/src/corelib/thread/qthread_unix.cpp +++ b/src/corelib/thread/qthread_unix.cpp @@ -8,6 +8,7 @@ #include #include +#include "qloggingcategory.h" #include #if defined(Q_OS_DARWIN) @@ -387,7 +388,6 @@ void QThreadPrivate::finish() d->priority = QThread::InheritPriority; 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 33dd03166cf..bc5de38b0ba 100644 --- a/src/corelib/thread/qthread_win.cpp +++ b/src/corelib/thread/qthread_win.cpp @@ -296,7 +296,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)