diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2019-08-02 19:14:55 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2019-08-02 19:14:55 +0100 |
commit | b24bd25253fe093f722ab576d29fdc41d04cb1ee (patch) | |
tree | 0fcf2afd9f852c4d4c291cf8afaa2c244d598105 /dev-qt/qtwayland/files/qtwayland-5.12.4-client-make-handleupdate-aware-of-exposure-changes.patch | |
parent | 121ed4eec41fbf03e1998d09eede1bf449da63b9 (diff) |
gentoo resync : 02.08.2019
Diffstat (limited to 'dev-qt/qtwayland/files/qtwayland-5.12.4-client-make-handleupdate-aware-of-exposure-changes.patch')
-rw-r--r-- | dev-qt/qtwayland/files/qtwayland-5.12.4-client-make-handleupdate-aware-of-exposure-changes.patch | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/dev-qt/qtwayland/files/qtwayland-5.12.4-client-make-handleupdate-aware-of-exposure-changes.patch b/dev-qt/qtwayland/files/qtwayland-5.12.4-client-make-handleupdate-aware-of-exposure-changes.patch new file mode 100644 index 000000000000..6aacad2a942e --- /dev/null +++ b/dev-qt/qtwayland/files/qtwayland-5.12.4-client-make-handleupdate-aware-of-exposure-changes.patch @@ -0,0 +1,82 @@ +From b13b595dc4f4fe6bdca7b69a21fd934ee233e149 Mon Sep 17 00:00:00 2001 +From: David Edmundson <davidedmundson@kde.org> +Date: Sun, 23 Jun 2019 14:48:30 +0200 +Subject: [PATCH] Client: Make handleUpdate aware of exposure changes + +The wl_surface can be destroyed whilst a render is happening. Calling +wl_surface::frame after the window is reset can crash as wl_surface is +null. + +Change-Id: I139a9b234cb6acba81d6c1d5fa58629904a25053 +--- + src/client/qwaylandwindow.cpp | 10 +++++++++- + src/client/qwaylandwindow_p.h | 4 ++++ + 2 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index 5ea0dce1e..7e7a4929c 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -79,6 +79,8 @@ Q_LOGGING_CATEGORY(lcWaylandBackingstore, "qt.qpa.wayland.backingstore") + + QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr; + ++QReadWriteLock mSurfaceLock; ++ + QWaylandWindow::QWaylandWindow(QWindow *window) + : QPlatformWindow(window) + , mDisplay(waylandScreen()->display()) +@@ -210,6 +212,7 @@ void QWaylandWindow::initWindow() + + void QWaylandWindow::initializeWlSurface() + { ++ QWriteLocker lock(&mSurfaceLock); + init(mDisplay->createSurface(static_cast<QtWayland::wl_surface *>(this))); + } + +@@ -245,8 +248,10 @@ void QWaylandWindow::reset(bool sendDestroyEvent) + mShellSurface = nullptr; + delete mSubSurfaceWindow; + mSubSurfaceWindow = nullptr; +- if (isInitialized()) ++ if (isInitialized()) { ++ QWriteLocker lock(&mSurfaceLock); + destroy(); ++ } + mScreens.clear(); + + if (mFrameCallback) { +@@ -1145,6 +1150,9 @@ void QWaylandWindow::requestUpdate() + void QWaylandWindow::handleUpdate() + { + // TODO: Should sync subsurfaces avoid requesting frame callbacks? ++ QReadLocker lock(&mSurfaceLock); ++ if (!isInitialized()) ++ return; + + if (mFrameCallback) { + wl_callback_destroy(mFrameCallback); +diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h +index e8c9d5684..d3706442f 100644 +--- a/src/client/qwaylandwindow_p.h ++++ b/src/client/qwaylandwindow_p.h +@@ -53,6 +53,8 @@ + + #include <QtCore/QWaitCondition> + #include <QtCore/QMutex> ++#include <QtCore/QReadWriteLock> ++ + #include <QtGui/QIcon> + #include <QtCore/QVariant> + #include <QtCore/QLoggingCategory> +@@ -271,6 +273,8 @@ private: + static QMutex mFrameSyncMutex; + static QWaylandWindow *mMouseGrab; + ++ QReadWriteLock mSurfaceLock; ++ + friend class QWaylandSubSurface; + }; + +-- +2.16.3 |