From caab7b355740dd9661046c1bf73e1add9de9d045 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Sun, 19 Jul 2015 21:49:36 +0900 Subject: Added safety harness for currentThreadObject() usage. currentThreadObject() returns a null pointer if the current thread was not started using the TQThread API. This relates to bug 1748. Signed-off-by: Michele Calgaro --- src/kernel/qobject.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'src/kernel/qobject.cpp') diff --git a/src/kernel/qobject.cpp b/src/kernel/qobject.cpp index e90e2bd9b..665aead21 100644 --- a/src/kernel/qobject.cpp +++ b/src/kernel/qobject.cpp @@ -203,9 +203,10 @@ void TQObject::moveToThread(TQThread *targetThread) } TQThread *objectThread = contextThreadObject(); + // NOTE currentThread could be NULL if the current thread was not started using the TQThread API TQThread *currentThread = TQThread::currentThreadObject(); - if (objectThread != currentThread) { + if (currentThread && objectThread != currentThread) { #if defined(QT_DEBUG) tqWarning( "TQObject::moveToThread: Current thread is not the object's thread" ); #endif @@ -2760,6 +2761,7 @@ void TQObject::activate_signal( TQConnectionList *clist, TQUObject *o ) } #endif + // NOTE currentThread could be NULL if the current thread was not started using the TQThread API const TQThread *currentThread = TQThread::currentThreadObject(); TQObject *object; @@ -2779,7 +2781,10 @@ void TQObject::activate_signal( TQConnectionList *clist, TQUObject *o ) sol->currentSender = this; } if ( c->memberType() == TQSIGNAL_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 TQObject::activate_signal( TQConnectionList *clist, TQUObject *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 TQObject::activate_signal( TQConnectionList *clist, TQUObject *o ) sol->currentSender = this; } if ( c->memberType() == TQSIGNAL_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 TQObject::activate_signal( TQConnectionList *clist, TQUObject *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 -- cgit v1.2.1