[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#761393: Sends GLX_BufferSwapComplete with no swaps outstanding



On Sun, Sep 14, 2014 at 17:17:33 -0700, Keith Packard wrote:

> Julien Cristau <jcristau@debian.org> writes:
> 
> > On Sat, Sep 13, 2014 at 16:43:08 +0200, Sjoerd Simons wrote:
> >
> >> Package: xserver-xorg-core
> >> Version: 2:1.16.0-2+b1
> >> Severity: important
> >> Tags: patch
> >> 
> >> Both totem and cheese (3.13.X) crash in cogl due to receiving duplicate
> >> GLX_BufferSwapComplete events.
> >> 
> >> Uupstream gnome bug: https://bugzilla.gnome.org/show_bug.cgi?id=733282
> >> Xorg upstream commit: http://cgit.freedesktop.org/xorg/xserver/commit/?id=bf338efc678258d2d366dff2ed873752f98f0bfc
> >> 
> > As far as I can tell that patch is an ABI break, as
> > present_complete_notify_proc is exported in the SDK.  So I'm not sure I
> > can pull that in to the 1.16 branch.  Keith, any idea how to resolve
> > that?
> 
> We can just change the caller to not call except when needed as a patch
> for 1.16. I almost did that on master, but decided to just make the
> interface pass all of the arguments.
> 
Right, that's even simpler...

From: Keith Packard <keithp@keithp.com>
Date: Thu, 4 Sep 2014 08:36:07 -0700
Subject: [PATCH] glx/present: Only send GLX_BufferSwapComplete for
 PresentCompleteKindPixmap

Present didn't provide the 'kind' argument to the
present_complete_notify hook that GLX uses to construct
GLX_BufferSwapComplete events, so GLX was reporting events for
PresentCompleteKindMSC notifications, which resulted in duplicate
GLX_BufferSwapComplete events and crashes in clutter.

See the gnome bug: https://bugzilla.gnome.org/show_bug.cgi?id=733282

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
(cherry picked from commit bf338efc678258d2d366dff2ed873752f98f0bfc)
[backport to 1.16: check 'kind' in the caller to avoid ABI change]
Signed-off-by: Julien Cristau <jcristau@debian.org>
---
 present/present_event.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/present/present_event.c b/present/present_event.c
index ff57eba..e9b8276 100644
--- a/present/present_event.c
+++ b/present/present_event.c
@@ -173,7 +173,7 @@ present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 se
             }
         }
     }
-    if (complete_notify)
+    if (complete_notify && kind == PresentCompleteKindPixmap)
         (*complete_notify)(window, mode, serial, ust, msc);
 }
 
-- 
2.1.0

Attachment: signature.asc
Description: Digital signature


Reply to: