diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-09-08 11:32:16 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2019-09-08 11:32:16 +0200 |
commit | 64e6eaf559395ee96232db69e0261c4a183e1fb7 (patch) | |
tree | 18b719b7746e0c70ae70546931e43b364d774716 /src/client/qwaylandwindow.cpp | |
parent | 53ab5e7748340f922f7f32c7d2db4965aa8c2ff2 (diff) | |
parent | ac80dfb5b921437b699a992d1f211e8edf4d7844 (diff) | |
download | qtwayland-64e6eaf559395ee96232db69e0261c4a183e1fb7.tar.gz |
Merge remote-tracking branch 'origin/5.12' into 5.13
Change-Id: I5d587b79b96d2b44f1975419a658c259c63fa30d
Diffstat (limited to 'src/client/qwaylandwindow.cpp')
-rw-r--r-- | src/client/qwaylandwindow.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp index 40289d81..ccfcaf93 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -200,7 +200,10 @@ void QWaylandWindow::initWindow() void QWaylandWindow::initializeWlSurface() { Q_ASSERT(!isInitialized()); - init(mDisplay->createSurface(static_cast<QtWayland::wl_surface *>(this))); + { + QWriteLocker lock(&mSurfaceLock); + init(mDisplay->createSurface(static_cast<QtWayland::wl_surface *>(this))); + } emit wlSurfaceCreated(); } @@ -238,6 +241,7 @@ void QWaylandWindow::reset(bool sendDestroyEvent) mSubSurfaceWindow = nullptr; if (isInitialized()) { emit wlSurfaceDestroyed(); + QWriteLocker lock(&mSurfaceLock); destroy(); } mScreens.clear(); @@ -659,10 +663,11 @@ QMutex QWaylandWindow::mFrameSyncMutex; bool QWaylandWindow::waitForFrameSync(int timeout) { - QMutexLocker locker(&mFrameSyncMutex); if (!mWaitingForFrameCallback) return true; + QMutexLocker locker(&mFrameSyncMutex); + wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(mFrameCallback), mFrameQueue); mDisplay->dispatchQueueWhile(mFrameQueue, [&]() { return mWaitingForFrameCallback; }, timeout); @@ -1159,6 +1164,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); |