summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/qwaylandwindow.cpp14
-rw-r--r--src/client/qwaylandwindow_p.h3
2 files changed, 8 insertions, 9 deletions
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index e8f3ceb4f..59c446bb3 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -83,7 +83,7 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
, mMousePressedInContentArea(Qt::NoButton)
, m_cursor(Qt::ArrowCursor)
, mWaitingForFrameSync(false)
- , mFrameCallback(0)
+ , mFrameCallback(nullptr)
, mRequestResizeSent(false)
, mCanResize(true)
, mResizeDirty(false)
@@ -453,14 +453,12 @@ void QWaylandWindow::requestResize()
void QWaylandWindow::attach(QWaylandBuffer *buffer, int x, int y)
{
- if (mFrameCallback) {
- wl_callback_destroy(mFrameCallback);
- mFrameCallback = 0;
- }
+ mFrameCallback = nullptr;
if (buffer) {
- mFrameCallback = frame();
- wl_callback_add_listener(mFrameCallback, &QWaylandWindow::callbackListener, this);
+ auto callback = frame();
+ wl_callback_add_listener(callback, &QWaylandWindow::callbackListener, this);
+ mFrameCallback = callback;
mWaitingForFrameSync = true;
attach(buffer->buffer(), x, y);
@@ -491,7 +489,7 @@ void QWaylandWindow::frameCallback(void *data, struct wl_callback *callback, uin
self->mWaitingForFrameSync = false;
wl_callback_destroy(callback);
- self->mFrameCallback = 0;
+ self->mFrameCallback.testAndSetRelaxed(callback, nullptr);
if (self->mUpdateRequested) {
QWindowPrivate *w = QWindowPrivate::get(self->window());
self->mUpdateRequested = false;
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
index 03c4a1e48..e0c42ace5 100644
--- a/src/client/qwaylandwindow_p.h
+++ b/src/client/qwaylandwindow_p.h
@@ -53,6 +53,7 @@
#include <QtCore/QWaitCondition>
#include <QtCore/QMutex>
+#include <QtCore/QAtomicPointer>
#include <QtGui/QIcon>
#include <QtCore/QVariant>
@@ -220,7 +221,7 @@ protected:
WId mWindowId;
bool mWaitingForFrameSync;
- struct wl_callback *mFrameCallback;
+ QAtomicPointer<struct wl_callback> mFrameCallback;
QWaitCondition mFrameSyncWait;
QMutex mResizeLock;