diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2018-02-13 14:37:05 +0100 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2018-02-14 14:18:09 +0000 |
commit | 54d57cbd6fe9c6f668bb42f02f2674239359e6fd (patch) | |
tree | 945f2af28123320f63998f56a560d2af44c1b329 /src/corelib/thread | |
parent | fe5edcee602f0ab2912bbdd1a21f4309ed7dbfd6 (diff) |
Make QThreadPrivate::createEventDispatcher do exactly what it says
Leaving the logic of starting up the event dispatcher to the call site,
unified both the case of a custom event dispatcher and the default
event dispatcher.
The data argument is left in due to the static nature of the function.
Change-Id: Ia2020e39ccc67cd5a583d4e614dd978b2ec44dba
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/thread')
-rw-r--r-- | src/corelib/thread/qthread_p.h | 4 | ||||
-rw-r--r-- | src/corelib/thread/qthread_unix.cpp | 26 | ||||
-rw-r--r-- | src/corelib/thread/qthread_win.cpp | 20 |
3 files changed, 27 insertions, 23 deletions
diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h index baeefd87ff..46294a5fc8 100644 --- a/src/corelib/thread/qthread_p.h +++ b/src/corelib/thread/qthread_p.h @@ -195,7 +195,7 @@ public: #endif // Q_OS_WIN QThreadData *data; - static void createEventDispatcher(QThreadData *data); + static QAbstractEventDispatcher *createEventDispatcher(QThreadData *data); void ref() { @@ -222,7 +222,7 @@ public: static void setCurrentThread(QThread*) {} static QThread *threadForId(int) { return QThread::currentThread(); } - static void createEventDispatcher(QThreadData *data); + static QAbstractEventDispatcher *createEventDispatcher(QThreadData *data); void ref() {} void deref() {} diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp index 31292a0598..2c815b870a 100644 --- a/src/corelib/thread/qthread_unix.cpp +++ b/src/corelib/thread/qthread_unix.cpp @@ -285,27 +285,26 @@ typedef void*(*QtThreadCallback)(void*); #endif // QT_NO_THREAD -void QThreadPrivate::createEventDispatcher(QThreadData *data) +QAbstractEventDispatcher *QThreadPrivate::createEventDispatcher(QThreadData *data) { + Q_UNUSED(data); #if defined(Q_OS_DARWIN) bool ok = false; int value = qEnvironmentVariableIntValue("QT_EVENT_DISPATCHER_CORE_FOUNDATION", &ok); if (ok && value > 0) - data->eventDispatcher.storeRelease(new QEventDispatcherCoreFoundation); + return new QEventDispatcherCoreFoundation; else - data->eventDispatcher.storeRelease(new QEventDispatcherUNIX); + return new QEventDispatcherUNIX; #elif !defined(QT_NO_GLIB) if (qEnvironmentVariableIsEmpty("QT_NO_GLIB") && qEnvironmentVariableIsEmpty("QT_NO_THREADED_GLIB") && QEventDispatcherGlib::versionSupported()) - data->eventDispatcher.storeRelease(new QEventDispatcherGlib); + return new QEventDispatcherGlib; else - data->eventDispatcher.storeRelease(new QEventDispatcherUNIX); + return new QEventDispatcherUNIX; #else - data->eventDispatcher.storeRelease(new QEventDispatcherUNIX); + return new QEventDispatcherUNIX; #endif - - data->eventDispatcher.load()->startingUp(); } #ifndef QT_NO_THREAD @@ -352,10 +351,13 @@ void *QThreadPrivate::start(void *arg) data->quitNow = thr->d_func()->exited; } - if (data->hasEventDispatcher()) // custom event dispatcher set? - data->eventDispatcher.load()->startingUp(); - else - createEventDispatcher(data); + QAbstractEventDispatcher *eventDispatcher = data->eventDispatcher.load(); + if (!eventDispatcher) { + eventDispatcher = createEventDispatcher(data); + data->eventDispatcher.storeRelease(eventDispatcher); + } + + eventDispatcher->startingUp(); #if (defined(Q_OS_LINUX) || defined(Q_OS_MAC) || defined(Q_OS_QNX)) { diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp index 136733444c..4459ae87af 100644 --- a/src/corelib/thread/qthread_win.cpp +++ b/src/corelib/thread/qthread_win.cpp @@ -331,15 +331,14 @@ void qt_set_thread_name(HANDLE threadId, LPCSTR threadName) #endif // QT_NO_THREAD -void QThreadPrivate::createEventDispatcher(QThreadData *data) +QAbstractEventDispatcher *QThreadPrivate::createEventDispatcher(QThreadData *data) { + Q_UNUSED(data); #ifndef Q_OS_WINRT - QEventDispatcherWin32 *theEventDispatcher = new QEventDispatcherWin32; + return new QEventDispatcherWin32; #else - QEventDispatcherWinRT *theEventDispatcher = new QEventDispatcherWinRT; + return new QEventDispatcherWinRT; #endif - data->eventDispatcher.storeRelease(theEventDispatcher); - theEventDispatcher->startingUp(); } #ifndef QT_NO_THREAD @@ -360,10 +359,13 @@ unsigned int __stdcall QT_ENSURE_STACK_ALIGNED_FOR_SSE QThreadPrivate::start(voi data->quitNow = thr->d_func()->exited; } - if (data->hasEventDispatcher()) // custom event dispatcher set? - data->eventDispatcher.load()->startingUp(); - else - createEventDispatcher(data); + QAbstractEventDispatcher *eventDispatcher = data->eventDispatcher.load(); + if (!eventDispatcher) { + eventDispatcher = createEventDispatcher(data); + data->eventDispatcher.storeRelease(eventDispatcher); + } + + eventDispatcher->startingUp(); #if !defined(QT_NO_DEBUG) && defined(Q_CC_MSVC) && !defined(Q_OS_WINRT) // sets the name of the current thread. |