From 9ab06e61858e3fb718eb1023f819b8490804f1a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Thu, 7 Apr 2022 19:18:19 +0200 Subject: [PATCH] Guard against QWindow being deleted during close event The QBoolBlocker would end up using a stale d-pointer if the window was deleted during delivery of the close event. Fixes: QTBUG-102327 Pick-to: 6.3 6.2 Change-Id: I8f458581eeabf0d0f27a348ad1f926295caa3a58 Reviewed-by: Dimitrios Apostolou Reviewed-by: Volker Hilsheimer --- src/gui/kernel/qwindow.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index c1373b32248..082c0c6b8c5 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -2272,8 +2272,15 @@ bool QWindow::close() if (!d->platformWindow) return true; - QBoolBlocker inCloseReset(d->inClose); - return d->platformWindow->close(); + // The window might be deleted during close, + // as a result of delivering the close event. + QPointer guard(this); + d->inClose = true; + bool success = d->platformWindow->close(); + if (guard) + d->inClose = false; + + return success; } bool QWindowPrivate::participatesInLastWindowClosed() const