summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2024-09-24 22:42:35 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2024-09-24 22:42:35 +0900
commit8e6530766133feae995388d20f7c62139ade4cbe (patch)
tree9764028d277b50f92c81107533e8a504b0bf82b1
parent232dd26c834e430364fcdd3d4962225a892127fe (diff)
downloadtqt3-8e6530766133feae995388d20f7c62139ade4cbe.tar.gz
tqt3-8e6530766133feae995388d20f7c62139ade4cbe.zip
Fix possible SEGV if the sender object list was null and thread support enabled
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
-rw-r--r--src/kernel/tqobject.cpp32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/kernel/tqobject.cpp b/src/kernel/tqobject.cpp
index 84361e501..a943ff148 100644
--- a/src/kernel/tqobject.cpp
+++ b/src/kernel/tqobject.cpp
@@ -1101,20 +1101,20 @@ bool TQObject::event( TQEvent *e )
|| (d->ownThread == TQThread::currentThreadObject()))
#endif // TQT_THREAD_SUPPORT
{
- TQSenderObjectList* sol;
- TQObject* oldSender = 0;
- sol = senderObjects;
+ TQObject *oldSender = nullptr;
+ TQSenderObjectList *sol = senderObjects;
+ if ( sol )
+ {
#ifdef TQT_THREAD_SUPPORT
- sol->listMutex->lock();
+ sol->listMutex->lock();
#endif // TQT_THREAD_SUPPORT
- if ( sol ) {
oldSender = sol->currentSender;
sol->ref();
sol->currentSender = metaEvent->sender();
- }
#ifdef TQT_THREAD_SUPPORT
- sol->listMutex->unlock();
+ sol->listMutex->unlock();
#endif // TQT_THREAD_SUPPORT
+ }
TQUObject *o = metaEvent->data();
if (metaEvent->type() == TQMetaCallEvent::MetaCallEmit) {
tqt_emit( metaEvent->id(), o );
@@ -1122,25 +1122,31 @@ bool TQObject::event( TQEvent *e )
if (metaEvent->type() == TQMetaCallEvent::MetaCallInvoke) {
tqt_invoke( metaEvent->id(), o );
}
+ if ( sol )
+ {
#ifdef TQT_THREAD_SUPPORT
- sol->listMutex->lock();
+ sol->listMutex->lock();
#endif // TQT_THREAD_SUPPORT
- if (sol ) {
sol->currentSender = oldSender;
- if ( sol->deref() ) {
+ if ( sol->deref() )
+ {
#ifdef TQT_THREAD_SUPPORT
sol->listMutex->unlock();
#endif // TQT_THREAD_SUPPORT
delete sol;
- sol = NULL;
+ sol = nullptr;
}
}
#ifdef TQT_THREAD_SUPPORT
- if (sol) sol->listMutex->unlock();
+ if (sol)
+ {
+ sol->listMutex->unlock();
+ }
#endif // TQT_THREAD_SUPPORT
}
#ifdef TQT_THREAD_SUPPORT
- else {
+ else
+ {
tqWarning("TQObject: Ignoring metacall event from non-owning thread");
}
#endif // TQT_THREAD_SUPPORT