Mesa (master): glx: Suppress BadDrawable from DRI2CopyRegion
Module: Mesa Branch: master Commit: 094c6fbc45cee1b53d9f1d7d4123d6da6a8958a3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=094c6fbc45cee1b53d9f1d7d4123d6da6a8958a3 Author: Kristian Høgsberg Date: Mon Mar 22 21:57:26 2010 -0400 glx: Suppress BadDrawable from DRI2CopyRegion This can happen when an X window is destroyed behind our back. We use DRI2CopyRegion behind the scenes in many places (like flushing the fake front to the real front) so we have to ignore X errors triggered in that case. The glean test cases trigger this consistently as they don't destroy the GLX drawable nicely, they just destroy the X window. --- src/glx/dri2.c | 15 ++- 1 files changed, 14 insertions(+), 1 deletions(-) diff --git a/src/glx/dri2.c b/src/glx/dri2.c index 5de55cd..9ca9b3e 100644 --- a/src/glx/dri2.c +++ b/src/glx/dri2.c @@ -62,6 +62,8 @@ static Bool DRI2WireToEvent(Display *dpy, XEvent *event, xEvent *wire); static Status DRI2EventToWire(Display *dpy, XEvent *event, xEvent *wire); +static int +DRI2Error(Display *display, xError *err, XExtCodes *codes, int *ret_code); static /* const */ XExtensionHooks dri2ExtensionHooks = { NULL, /* create_gc */ @@ -73,7 +75,7 @@ static /* const */ XExtensionHooks dri2ExtensionHooks = { DRI2CloseDisplay, /* close_display */ DRI2WireToEvent,/* wire_to_event */ DRI2EventToWire,/* event_to_wire */ - NULL, /* error */ + DRI2Error, /* error */ NULL, /* error_string */ }; @@ -160,6 +162,17 @@ DRI2EventToWire(Display *dpy, XEvent *event, xEvent *wire) return Success; } +static int +DRI2Error(Display *display, xError *err, XExtCodes *codes, int *ret_code) +{ +if (err->majorCode == codes->major_opcode && + err->errorCode == BadDrawable && + err->minorCode == X_DRI2CopyRegion) + return True; + +return False; +} + Bool DRI2QueryExtension(Display * dpy, int *eventBase, int *errorBase) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): glx: Suppress BadDrawable from DRI2CopyRegion
Module: Mesa Branch: master Commit: 7a0bcba9f9d7a4dcba11d06f207a5d494a330d5f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7a0bcba9f9d7a4dcba11d06f207a5d494a330d5f Author: Kristian Høgsberg Date: Mon Mar 22 21:57:26 2010 -0400 glx: Suppress BadDrawable from DRI2CopyRegion This can happen when an X window is destroyed behind our back. We use DRI2CopyRegion behind the scenes in many places (like flushing the fake front to the real front) so we have to ignore X errors triggered in that case. The glean test cases trigger this consistently as they don't destroy the GLX drawable nicely, they just destroy the X window. --- src/glx/dri2.c | 15 ++- 1 files changed, 14 insertions(+), 1 deletions(-) diff --git a/src/glx/dri2.c b/src/glx/dri2.c index 5de55cd..9ca9b3e 100644 --- a/src/glx/dri2.c +++ b/src/glx/dri2.c @@ -62,6 +62,8 @@ static Bool DRI2WireToEvent(Display *dpy, XEvent *event, xEvent *wire); static Status DRI2EventToWire(Display *dpy, XEvent *event, xEvent *wire); +static int +DRI2Error(Display *display, xError *err, XExtCodes *codes, int *ret_code); static /* const */ XExtensionHooks dri2ExtensionHooks = { NULL, /* create_gc */ @@ -73,7 +75,7 @@ static /* const */ XExtensionHooks dri2ExtensionHooks = { DRI2CloseDisplay, /* close_display */ DRI2WireToEvent,/* wire_to_event */ DRI2EventToWire,/* event_to_wire */ - NULL, /* error */ + DRI2Error, /* error */ NULL, /* error_string */ }; @@ -160,6 +162,17 @@ DRI2EventToWire(Display *dpy, XEvent *event, xEvent *wire) return Success; } +static int +DRI2Error(Display *display, xError *err, XExtCodes *codes, int *ret_code) +{ +if (err->majorCode == codes->major_opcode && + err->errorCode == BadDrawable && + err->minorCode == X_DRI2CopyRegion) + return True; + +return False; +} + Bool DRI2QueryExtension(Display * dpy, int *eventBase, int *errorBase) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit