Do not crash all the time with shm apps
authorLaszlo Agocs <laszlo.p.agocs@nokia.com>
Thu, 10 May 2012 11:00:08 +0000 (14:00 +0300)
committerLaszlo Agocs <laszlo.p.agocs@nokia.com>
Thu, 10 May 2012 17:14:55 +0000 (19:14 +0200)
Change-Id: Iea42adf18cbd724f1f9dc19ec1d1f6baeff07d97
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
src/plugins/platforms/wayland/qwaylandshmbackingstore.cpp
src/plugins/platforms/wayland/qwaylandwindow.cpp

index 5858f24..d21a995 100644 (file)
@@ -265,10 +265,11 @@ QImage *QWaylandShmBackingStore::entireSurface() const
 
 void QWaylandShmBackingStore::done(void *data, wl_callback *callback, uint32_t time)
 {
-    Q_UNUSED(callback);
     Q_UNUSED(time);
     QWaylandShmBackingStore *self =
             static_cast<QWaylandShmBackingStore *>(data);
+    if (callback != self->mFrameCallback) // others, like QWaylandWindow, may trigger callbacks too
+        return;
     QWaylandWindow *window = self->waylandWindow();
     wl_callback_destroy(self->mFrameCallback);
     self->mFrameCallback = 0;
index c023de5..5635322 100644 (file)
@@ -228,11 +228,12 @@ const wl_callback_listener QWaylandWindow::callbackListener = {
     QWaylandWindow::frameCallback
 };
 
-void QWaylandWindow::frameCallback(void *data, struct wl_callback *wl_callback, uint32_t time)
+void QWaylandWindow::frameCallback(void *data, struct wl_callback *callback, uint32_t time)
 {
     Q_UNUSED(time);
-    Q_UNUSED(wl_callback);
     QWaylandWindow *self = static_cast<QWaylandWindow*>(data);
+    if (callback != self->mFrameCallback) // might be a callback caused by the shm backingstore
+        return;
     self->mWaitingForFrameSync = false;
     if (self->mFrameCallback) {
         wl_callback_destroy(self->mFrameCallback);