From a19e06f92efbda9e4e2c905ca06f59dba8a6b340 Mon Sep 17 00:00:00 2001 From: Andreas Sturmlechner Date: Mon, 18 Apr 2022 15:17:11 +0200 Subject: kde-plasma/kwayland-server: Fix race in wp_drm_lease_v1 Upstream commit dc09ce85f00b3a790e2817888067c3826280dd8e KDE-bug: https://bugs.kde.org/show_bug.cgi?id=452435 Package-Manager: Portage-3.0.30, Repoman-3.0.3 Signed-off-by: Andreas Sturmlechner --- ...server-5.24.4-fix-race-in-wp_drm_lease_v1.patch | 73 ++++++++++++++++++++++ .../kwayland-server-5.24.4-r2.ebuild | 46 ++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 kde-plasma/kwayland-server/files/kwayland-server-5.24.4-fix-race-in-wp_drm_lease_v1.patch create mode 100644 kde-plasma/kwayland-server/kwayland-server-5.24.4-r2.ebuild (limited to 'kde-plasma/kwayland-server') diff --git a/kde-plasma/kwayland-server/files/kwayland-server-5.24.4-fix-race-in-wp_drm_lease_v1.patch b/kde-plasma/kwayland-server/files/kwayland-server-5.24.4-fix-race-in-wp_drm_lease_v1.patch new file mode 100644 index 000000000000..1799a711b472 --- /dev/null +++ b/kde-plasma/kwayland-server/files/kwayland-server-5.24.4-fix-race-in-wp_drm_lease_v1.patch @@ -0,0 +1,73 @@ +From dc09ce85f00b3a790e2817888067c3826280dd8e Mon Sep 17 00:00:00 2001 +From: Weng Xuetian +Date: Sat, 16 Apr 2022 00:01:12 -0700 +Subject: [PATCH] Fix race in wp_drm_lease_v1. + +Basically this is a well known issue in wayland for globals. If bind +comes after destroyed, it will raise a invalid global error. The common +practice is to delay the destroy of global. Similar technique is also +applied to wl_output. + +CCBUG: 452435 +(cherry picked from commit cdc9dcfb0a1f0445c46ee2cefa114329a2408555) +--- + src/server/drmleasedevice_v1_interface.cpp | 14 +++++--------- + src/server/drmleasedevice_v1_interface_p.h | 2 +- + 2 files changed, 6 insertions(+), 10 deletions(-) + +diff --git a/src/server/drmleasedevice_v1_interface.cpp b/src/server/drmleasedevice_v1_interface.cpp +index bffd22cd..7e338022 100644 +--- a/src/server/drmleasedevice_v1_interface.cpp ++++ b/src/server/drmleasedevice_v1_interface.cpp +@@ -84,10 +84,6 @@ void DrmLeaseDeviceV1InterfacePrivate::remove() + request->connectors.clear(); + } + globalRemove(); +- removed = true; +- if (resourceMap().isEmpty()) { +- delete this; +- } + } + + void DrmLeaseDeviceV1InterfacePrivate::registerConnector(DrmLeaseConnectorV1Interface *connector) +@@ -144,6 +140,9 @@ void DrmLeaseDeviceV1InterfacePrivate::wp_drm_lease_device_v1_release(Resource * + + void DrmLeaseDeviceV1InterfacePrivate::wp_drm_lease_device_v1_bind_resource(Resource *resource) + { ++ if (isGlobalRemoved()) { ++ return; ++ } + if (!hasDrmMaster) { + pendingFds << resource->handle; + return; +@@ -161,12 +160,9 @@ void DrmLeaseDeviceV1InterfacePrivate::wp_drm_lease_device_v1_bind_resource(Reso + } + } + +-void DrmLeaseDeviceV1InterfacePrivate::wp_drm_lease_device_v1_destroy_resource(Resource *resource) ++void DrmLeaseDeviceV1InterfacePrivate::wp_drm_lease_device_v1_destroy_global() + { +- Q_UNUSED(resource) +- if (removed && resourceMap().isEmpty()) { +- delete this; +- } ++ delete this; + } + + +diff --git a/src/server/drmleasedevice_v1_interface_p.h b/src/server/drmleasedevice_v1_interface_p.h +index 4bef36e4..085aac85 100644 +--- a/src/server/drmleasedevice_v1_interface_p.h ++++ b/src/server/drmleasedevice_v1_interface_p.h +@@ -44,7 +44,7 @@ protected: + void wp_drm_lease_device_v1_create_lease_request(Resource *resource, uint32_t id) override; + void wp_drm_lease_device_v1_release(Resource *resource) override; + void wp_drm_lease_device_v1_bind_resource(Resource *resource) override; +- void wp_drm_lease_device_v1_destroy_resource(Resource *resource) override; ++ void wp_drm_lease_device_v1_destroy_global() override; + }; + + class DrmLeaseConnectorV1InterfacePrivate : public QObject, public QtWaylandServer::wp_drm_lease_connector_v1 +-- +GitLab + diff --git a/kde-plasma/kwayland-server/kwayland-server-5.24.4-r2.ebuild b/kde-plasma/kwayland-server/kwayland-server-5.24.4-r2.ebuild new file mode 100644 index 000000000000..5fd1e1c9c476 --- /dev/null +++ b/kde-plasma/kwayland-server/kwayland-server-5.24.4-r2.ebuild @@ -0,0 +1,46 @@ +# Copyright 1999-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +ECM_QTHELP="true" +ECM_TEST="true" +KFMIN=5.90.0 +PVCUT=$(ver_cut 1-2) +QTMIN=5.15.2 +inherit ecm kde.org + +DESCRIPTION="Wayland Server Components built on KDE Frameworks" +HOMEPAGE="https://invent.kde.org/plasma/kwayland-server" + +LICENSE="LGPL-2.1" +SLOT="5" +KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86" +IUSE="" + +# All failing, I guess we need a virtual wayland server +RESTRICT="test" + +RDEPEND=" + >=dev-libs/wayland-1.19.0 + >=dev-qt/qtconcurrent-${QTMIN}:5 + >=dev-qt/qtgui-${QTMIN}:5[egl] + >=dev-qt/qtwayland-${QTMIN}:5 + >=kde-frameworks/kwayland-${KFMIN}:5 + media-libs/libglvnd +" +DEPEND="${RDEPEND} + >=dev-libs/plasma-wayland-protocols-1.6.0 + >=dev-libs/wayland-protocols-1.24 +" +BDEPEND=" + >=dev-qt/qtwaylandscanner-${QTMIN}:5 + dev-util/wayland-scanner +" + +PATCHES=( + "${FILESDIR}"/${P}-fix-layer-shell-reset.patch + "${FILESDIR}"/${P}-guard-subsurface-parent-access.patch # KDE-bug 452044 + "${FILESDIR}"/${P}-fix-crash-on-screen-setup-change.patch # KDE-bug 452318 + "${FILESDIR}"/${P}-fix-race-in-wp_drm_lease_v1.patch # KDE-bug 452435 +) -- cgit v1.2.3-65-gdbad