glx: handle spurious GLX_BufferSwapComplete events gracefully
authorRobert Bragg <robert@linux.intel.com>
Fri, 16 Apr 2010 13:38:52 +0000 (14:38 +0100)
committerRobert Bragg <robert@linux.intel.com>
Mon, 19 Apr 2010 10:24:42 +0000 (11:24 +0100)
Instead of simply aborting we now print out a warning, when a spurious
GLX_BufferSwapComplete event is handled since it seems that people are
coming across the problem (perhaps due to a buggy driver) and making
apps crash in this situation is a bit extreme.

clutter/glx/clutter-event-glx.c

index f6c7b4e..2034534 100644 (file)
@@ -82,8 +82,14 @@ clutter_backend_glx_handle_event (ClutterBackendX11 *backend_x11,
 
       if (stage_x11->xwin == swap_complete_event->drawable)
         {
-          g_assert (stage_glx->pending_swaps);
-          stage_glx->pending_swaps--;
+          if (G_UNLIKELY (stage_glx->pending_swaps == 0))
+            {
+              g_warning ("Spurious GLX_BufferSwapComplete event received for "
+                         "stage drawable = 0x%08lx",
+                         swap_complete_event->drawable);
+            }
+          else
+            stage_glx->pending_swaps--;
           return TRUE;
         }
     }