diff options
author | Michele Calgaro <[email protected]> | 2015-07-19 22:04:28 +0900 |
---|---|---|
committer | Michele Calgaro <[email protected]> | 2015-08-26 23:13:47 +0900 |
commit | 8eefba828fef6908ef67d610e9fbbb4abb28d3ba (patch) | |
tree | c8887269085094c5f9ae56dec797da1001f06003 /src/kernel/qobject.cpp | |
parent | d1fd5b9b238e16c1ee25f9dbb00a6a964d4061b9 (diff) | |
download | qt3-8eefba828fef6908ef67d610e9fbbb4abb28d3ba.tar.gz qt3-8eefba828fef6908ef67d610e9fbbb4abb28d3ba.zip |
Added safety harness for currentThreadObject() usage.
currentThreadObject() returns a null pointer if the
current thread was not started using the QThread API.
This relates to bug 1748.
(cherry picked from commit dad70b4c5201ece044ecb663bb91b48ba8bd84a3)
Signed-off-by: Michele Calgaro <[email protected]>
Diffstat (limited to 'src/kernel/qobject.cpp')
-rw-r--r-- | src/kernel/qobject.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/kernel/qobject.cpp b/src/kernel/qobject.cpp index d6be971..b48531e 100644 --- a/src/kernel/qobject.cpp +++ b/src/kernel/qobject.cpp @@ -203,9 +203,10 @@ void QObject::moveToThread(QThread *targetThread) } QThread *objectThread = contextThreadObject(); + // NOTE currentThread could be NULL if the current thread was not started using the QThread API QThread *currentThread = QThread::currentThreadObject(); - if (objectThread != currentThread) { + if (currentThread && objectThread != currentThread) { #if defined(QT_DEBUG) qWarning( "QObject::moveToThread: Current thread is not the object's thread" ); #endif @@ -2760,6 +2761,7 @@ void QObject::activate_signal( QConnectionList *clist, QUObject *o ) } #endif + // NOTE currentThread could be NULL if the current thread was not started using the QThread API const QThread *currentThread = QThread::currentThreadObject(); QObject *object; @@ -2779,7 +2781,10 @@ void QObject::activate_signal( QConnectionList *clist, QUObject *o ) sol->currentSender = this; } if ( c->memberType() == QSIGNAL_CODE ) { - if ((d->disableThreadPostedEvents) || (object->d->disableThreadPostedEvents) || (currentThread->threadPostedEventsDisabled()) || (object->d->ownThread == currentThread)) { + if ((d->disableThreadPostedEvents) || + (object->d->disableThreadPostedEvents) || + (currentThread && currentThread->threadPostedEventsDisabled()) || + (currentThread && object->d->ownThread == currentThread)) { #ifdef QT_THREAD_SUPPORT sol->listMutex->unlock(); #endif // QT_THREAD_SUPPORT @@ -2798,7 +2803,10 @@ void QObject::activate_signal( QConnectionList *clist, QUObject *o ) } } else { - if ((d->disableThreadPostedEvents) || (object->d->disableThreadPostedEvents) || (currentThread->threadPostedEventsDisabled()) || (object->d->ownThread == currentThread)) { + if ((d->disableThreadPostedEvents) || + (object->d->disableThreadPostedEvents) || + (currentThread && currentThread->threadPostedEventsDisabled()) || + (currentThread && object->d->ownThread == currentThread)) { #ifdef QT_THREAD_SUPPORT sol->listMutex->unlock(); #endif // QT_THREAD_SUPPORT @@ -2846,7 +2854,10 @@ void QObject::activate_signal( QConnectionList *clist, QUObject *o ) sol->currentSender = this; } if ( c->memberType() == QSIGNAL_CODE ) { - if ((d->disableThreadPostedEvents) || (object->d->disableThreadPostedEvents) || (currentThread->threadPostedEventsDisabled()) || (object->d->ownThread == currentThread)) { + if ((d->disableThreadPostedEvents) || + (object->d->disableThreadPostedEvents) || + (currentThread && currentThread->threadPostedEventsDisabled()) || + (currentThread && object->d->ownThread == currentThread)) { #ifdef QT_THREAD_SUPPORT sol->listMutex->unlock(); #endif // QT_THREAD_SUPPORT @@ -2865,7 +2876,10 @@ void QObject::activate_signal( QConnectionList *clist, QUObject *o ) } } else { - if ((d->disableThreadPostedEvents) || (object->d->disableThreadPostedEvents) || (currentThread->threadPostedEventsDisabled()) || (object->d->ownThread == currentThread)) { + if ((d->disableThreadPostedEvents) || + (object->d->disableThreadPostedEvents) || + (currentThread && currentThread->threadPostedEventsDisabled()) || + (currentThread && object->d->ownThread == currentThread)) { #ifdef QT_THREAD_SUPPORT sol->listMutex->unlock(); #endif // QT_THREAD_SUPPORT |