From 722cbfe7384aa5692af4c3f03b562082fadcb93c Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Mon, 21 Nov 2011 15:28:57 +0100 Subject: [PATCH] Move QScopedLoopLevelCounter to qthread_p.h ... and use it in QCoreApplication::notifyInterna() instead of "reinventing" the wheel there. The constructor and destructor for QScopedLoopLevelCounter are inline, so the class does not need to be exported. Change-Id: I7af5a4ef0987f277bcc50c1057f3c74152f3d79d Reviewed-by: Olivier Goffart --- src/corelib/kernel/qcoreapplication.cpp | 11 +---------- src/corelib/thread/qthread_p.h | 11 +++++++++++ src/widgets/kernel/qapplication_p.h | 12 ------------ 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index c30f613..2a80d39 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -809,16 +809,7 @@ bool QCoreApplication::notifyInternal(QObject *receiver, QEvent *event) // call overhead. QObjectPrivate *d = receiver->d_func(); QThreadData *threadData = d->threadData; - - // Exception-safety without try/catch - struct Incrementer { - int &variable; - inline Incrementer(int &variable) : variable(variable) - { ++variable; } - inline ~Incrementer() - { --variable; } - }; - Incrementer inc(threadData->loopLevel); + QScopedLoopLevelCounter loopLevelCounter(threadData); #ifdef QT_JAMBI_BUILD int deleteWatch = 0; diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h index 04f9bf2..66dd8db 100644 --- a/src/corelib/thread/qthread_p.h +++ b/src/corelib/thread/qthread_p.h @@ -227,6 +227,17 @@ public: bool isAdopted; }; +class QScopedLoopLevelCounter +{ + QThreadData *threadData; +public: + inline QScopedLoopLevelCounter(QThreadData *threadData) + : threadData(threadData) + { ++threadData->loopLevel; } + inline ~QScopedLoopLevelCounter() + { --threadData->loopLevel; } +}; + // thread wrapper for the main() thread class QAdoptedThread : public QThread { diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h index d0674d4..c353a29 100644 --- a/src/widgets/kernel/qapplication_p.h +++ b/src/widgets/kernel/qapplication_p.h @@ -68,7 +68,6 @@ #include "QtCore/qhash.h" #include "QtCore/qpointer.h" #include "private/qcoreapplication_p.h" -#include #include "QtCore/qpoint.h" #include #include @@ -263,17 +262,6 @@ typedef struct tagGESTURECONFIG #endif // Q_WS_WIN -class QScopedLoopLevelCounter -{ - QThreadData *threadData; -public: - QScopedLoopLevelCounter(QThreadData *threadData) - : threadData(threadData) - { ++threadData->loopLevel; } - ~QScopedLoopLevelCounter() - { --threadData->loopLevel; } -}; - struct FontHash : public QHash { FontHash(); -- 2.7.4