From e01a004a38ed5e323ee238be02d2d2e2275eee09 Mon Sep 17 00:00:00 2001 From: Milian Wolff Date: Thu, 1 Jul 2021 10:20:21 +0200 Subject: [PATCH] Fix memory leak of QOffscreenScreen in QOffscreenIntegration Call handleScreenRemoved when the QOffscreenIntegration is getting destroyed. Fixes memory leaks such as this one: ``` $ memcheck --leak-check=full ./tst_qlabel -platform offscreen ... ==117791== 472 (88 direct, 384 indirect) bytes in 1 blocks are definitely lost in loss record 166 of 267 ==117791== at 0x483EF3F: operator new(unsigned long) (vg_replace_malloc.c:417) ==117791== by 0x48C0939: QOffscreenIntegration::configure(QList const&) (in /home/milian/projects/qt5/src/qtbase/build/plugins/platforms/libqoffscreen.so) ==117791== by 0x48C0B60: QOffscreenIntegration::createOffscreenIntegration(QList const&) (in /home/milian/projects/qt5/src/qtbase/build/plugins/platforms/libqoffscreen.so) ==117791== by 0x5381CB4: init_platform(QString const&, QString const&, QString const&, int&, char**) (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0) ==117791== by 0x5384E05: QGuiApplicationPrivate::createPlatformIntegration() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0) ==117791== by 0x5385B1F: QGuiApplicationPrivate::createEventDispatcher() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0) ==117791== by 0x5C67A76: QCoreApplicationPrivate::init() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Core.so.6.2.0) ==117791== by 0x5387826: QGuiApplicationPrivate::init() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Gui.so.6.2.0) ==117791== by 0x4C00368: QApplicationPrivate::init() (in /home/milian/projects/qt5/src/qtbase/build/lib/libQt6Widgets.so.6.2.0) ==117791== by 0x11D7D9: main (in /home/milian/projects/qt5/src/qtbase/build/tests/auto/widgets/widgets/qlabel/tst_qlabel) ==117791== ``` Pick-to: 6.2 Change-Id: Ibf4e6f4258514f85f23bb91b29008b837016edbc Reviewed-by: Marc Mutz Reviewed-by: Friedemann Kleint --- src/plugins/platforms/offscreen/qoffscreenintegration.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp index 14218bb537..310e71ae13 100644 --- a/src/plugins/platforms/offscreen/qoffscreenintegration.cpp +++ b/src/plugins/platforms/offscreen/qoffscreenintegration.cpp @@ -113,6 +113,8 @@ QOffscreenIntegration::QOffscreenIntegration() QOffscreenIntegration::~QOffscreenIntegration() { + for (auto screen : std::as_const(m_screens)) + QWindowSystemInterface::handleScreenRemoved(screen); } /*