diff options
author | Keith Packard <keithp@keithp.com> | 2014-09-04 08:36:07 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2014-09-11 18:19:41 -0700 |
commit | bf338efc678258d2d366dff2ed873752f98f0bfc (patch) | |
tree | d196a4d1b80965cd5b7c64d20607e1558eae9eb9 | |
parent | 7a0c79c8c478bf22ee71c1ea35886a6f555ef2bb (diff) |
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>
-rw-r--r-- | glx/glxcmds.c | 7 | ||||
-rw-r--r-- | present/present.h | 1 | ||||
-rw-r--r-- | present/present_event.c | 2 |
3 files changed, 7 insertions, 3 deletions
diff --git a/glx/glxcmds.c b/glx/glxcmds.c index 2fc3f4cc8..d11c66798 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -2508,13 +2508,16 @@ __glXsendSwapEvent(__GLXdrawable *drawable, int type, CARD64 ust, #if PRESENT static void -__glXpresentCompleteNotify(WindowPtr window, CARD8 present_mode, CARD32 serial, - uint64_t ust, uint64_t msc) +__glXpresentCompleteNotify(WindowPtr window, CARD8 present_kind, CARD8 present_mode, + CARD32 serial, uint64_t ust, uint64_t msc) { __GLXdrawable *drawable; int glx_type; int rc; + if (present_kind != PresentCompleteKindPixmap) + return; + rc = dixLookupResourceByType((void **) &drawable, window->drawable.id, __glXDrawableRes, serverClient, DixGetAttrAccess); diff --git a/present/present.h b/present/present.h index 0e3bdc08e..aab2e168a 100644 --- a/present/present.h +++ b/present/present.h @@ -116,6 +116,7 @@ extern _X_EXPORT Bool present_screen_init(ScreenPtr screen, present_screen_info_ptr info); typedef void (*present_complete_notify_proc)(WindowPtr window, + CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, diff --git a/present/present_event.c b/present/present_event.c index ff57eba41..d3a59ea25 100644 --- a/present/present_event.c +++ b/present/present_event.c @@ -174,7 +174,7 @@ present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 se } } if (complete_notify) - (*complete_notify)(window, mode, serial, ust, msc); + (*complete_notify)(window, kind, mode, serial, ust, msc); } void |