Mesa (10.6): glx: Fix __glXWireToEvent for BufferSwapComplete

Emil Velikov evelikov at kemper.freedesktop.org
Thu Aug 20 12:52:57 UTC 2015


Module: Mesa
Branch: 10.6
Commit: e57c526b8705d06f305b3d758edd0312316650a1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e57c526b8705d06f305b3d758edd0312316650a1

Author: Adam Jackson <ajax at redhat.com>
Date:   Fri Jul 31 11:32:58 2015 -0400

glx: Fix __glXWireToEvent for BufferSwapComplete

In the DRI2 path this event is magically synthesized from the
corresponding DRI2 event, but with Present, the server sends us the
event itself. The DRI2 path fills in the serial number, send_event, and
display fields of the XEvent struct that the app sees, but the Present
path did not.

This is likely related to a class of crashes seen in gtk/clutter apps:

https://bugzilla.redhat.com/attachment.cgi?id=1032631

Note that the crashing instruction is looking up the lock_fns slot in
the Display *, and %rdi (holding the Display *) is 0x1.

Cc: mesa-stable at lists.freedesktop.org
Signed-off-by: Adam Jackson <ajax at redhat.com>
Reviewed-by: Eric Anholt <eric at anholt.net>
(cherry picked from commit 8f7ebcb6fad53ea6d2f80fc5b7a046db07690032)

---

 src/glx/glxext.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/glx/glxext.c b/src/glx/glxext.c
index fdc24d4..dc87fb9 100644
--- a/src/glx/glxext.c
+++ b/src/glx/glxext.c
@@ -138,6 +138,9 @@ __glXWireToEvent(Display *dpy, XEvent *event, xEvent *wire)
       if (!glxDraw)
 	 return False;
 
+      aevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *) wire);
+      aevent->send_event = (awire->type & 0x80) != 0;
+      aevent->display = dpy;
       aevent->event_type = awire->event_type;
       aevent->drawable = glxDraw->xDrawable;
       aevent->ust = ((CARD64)awire->ust_hi << 32) | awire->ust_lo;




More information about the mesa-commit mailing list