diff options
author | Alex Trotsenko <alex1973tr@gmail.com> | 2021-09-09 17:14:07 +0300 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2021-09-13 12:09:06 +0000 |
commit | a1f6721fc8874d0c15b723db9908d090cd422585 (patch) | |
tree | 41dee66e6064fbdd27135159f9bf3b12a65cd353 | |
parent | 54fc6ef3c60d868b84dc95e688fa7cd9e55e0663 (diff) |
Allow destruction of QWinEventNotifier in its signalv6.2.0-rc1
Avoid use-after-free issue in QProcess.
Fixes: QTBUG-96285
Fixes: QTBUG-96359
Change-Id: I953d7a8ecaf301ec3a27db37e13748f905c3d097
Reviewed-by: Christoph Cullmann <cullmann@kde.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
(cherry picked from commit 4e0082a9cacfdfd0c43e6105274bc0d41dd18801)
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
-rw-r--r-- | src/corelib/kernel/qwineventnotifier.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/corelib/kernel/qwineventnotifier.cpp b/src/corelib/kernel/qwineventnotifier.cpp index 3371e101b6..073b8f61ab 100644 --- a/src/corelib/kernel/qwineventnotifier.cpp +++ b/src/corelib/kernel/qwineventnotifier.cpp @@ -41,6 +41,7 @@ #include "qcoreapplication.h" #include "qthread.h" +#include <QPointer> QT_BEGIN_NAMESPACE @@ -238,9 +239,10 @@ bool QWinEventNotifier::event(QEvent * e) // when the callback is queued. d->registered = false; + QPointer<QWinEventNotifier> alive(this); emit activated(d->handleToEvent, QPrivateSignal()); - if (d->enabled && !d->registered) { + if (alive && d->enabled && !d->registered) { SetThreadpoolWait(d->waitObject, d->handleToEvent, NULL); d->registered = true; } |