Blame SOURCES/0024-Client-Disconnect-registry-listener-on-destruction.patch

f8c1a9
From 1b5e43a593e917610e6245f7a272ac081c508ba4 Mon Sep 17 00:00:00 2001
f8c1a9
From: David Edmundson <davidedmundson@kde.org>
f8c1a9
Date: Fri, 14 May 2021 13:23:24 +0100
f8c1a9
Subject: [PATCH 24/36] Client: Disconnect registry listener on destruction
f8c1a9
f8c1a9
If a display outlives a QWaylandClientExtension and a new global is
f8c1a9
announced we end up delivering an event to a now deleted extension which
f8c1a9
will crash.
f8c1a9
f8c1a9
Change-Id: Idc0de40be61a2f7627ab4963e1fe29b22fbf3f04
f8c1a9
(cherry picked from commit c4ba37cd2f8cb81b9438b56ac604fc2f3e45083c)
f8c1a9
---
f8c1a9
 src/client/global/qwaylandclientextension.cpp | 7 +++++++
f8c1a9
 src/client/global/qwaylandclientextension.h   | 1 +
f8c1a9
 2 files changed, 8 insertions(+)
f8c1a9
f8c1a9
diff --git a/src/client/global/qwaylandclientextension.cpp b/src/client/global/qwaylandclientextension.cpp
f8c1a9
index 125b1e19..797b06fe 100644
f8c1a9
--- a/src/client/global/qwaylandclientextension.cpp
f8c1a9
+++ b/src/client/global/qwaylandclientextension.cpp
f8c1a9
@@ -88,6 +88,13 @@ QWaylandClientExtension::QWaylandClientExtension(const int ver)
f8c1a9
     QMetaObject::invokeMethod(this, "addRegistryListener", Qt::QueuedConnection);
f8c1a9
 }
f8c1a9
 
f8c1a9
+QWaylandClientExtension::~QWaylandClientExtension()
f8c1a9
+{
f8c1a9
+    Q_D(QWaylandClientExtension);
f8c1a9
+    if (d->registered && !QCoreApplication::closingDown())
f8c1a9
+        d->waylandIntegration->display()->removeListener(&QWaylandClientExtensionPrivate::handleRegistryGlobal, this);
f8c1a9
+}
f8c1a9
+
f8c1a9
 QtWaylandClient::QWaylandIntegration *QWaylandClientExtension::integration() const
f8c1a9
 {
f8c1a9
     Q_D(const QWaylandClientExtension);
f8c1a9
diff --git a/src/client/global/qwaylandclientextension.h b/src/client/global/qwaylandclientextension.h
f8c1a9
index 98272e57..5bd28398 100644
f8c1a9
--- a/src/client/global/qwaylandclientextension.h
f8c1a9
+++ b/src/client/global/qwaylandclientextension.h
f8c1a9
@@ -63,6 +63,7 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandClientExtension : public QObject
f8c1a9
     Q_PROPERTY(bool active READ isActive NOTIFY activeChanged)
f8c1a9
 public:
f8c1a9
     QWaylandClientExtension(const int version);
f8c1a9
+    ~QWaylandClientExtension();
f8c1a9
 
f8c1a9
     QtWaylandClient::QWaylandIntegration *integration() const;
f8c1a9
     int version() const;
f8c1a9
-- 
f8c1a9
2.33.1
f8c1a9