Index: mesa-7.10.2/src/glx/dri2.c =================================================================== --- mesa-7.10.2.orig/src/glx/dri2.c 2010-12-14 16:43:14.000000000 -0500 +++ mesa-7.10.2/src/glx/dri2.c 2011-05-24 15:01:57.620215214 -0400 @@ -244,8 +244,8 @@ return True; } -Bool -DRI2Connect(Display * dpy, XID window, char **driverName, char **deviceName) +static Bool +doDRI2Connect(Display * dpy, XID window, char **driverName, char **deviceName) { XExtDisplayInfo *info = DRI2FindDisplay(dpy); xDRI2ConnectReply rep; @@ -300,6 +300,40 @@ return True; } +/* swallow errors from DRI2Connect for non-local */ + +static Display *dri2connect_display; +static int (*old_handler)(Display *, XErrorEvent *); + +static int +dri2connect_handler(Display *dpy, XErrorEvent *error) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + if (dpy == dri2connect_display && + error->request_code == info->codes->major_opcode && + error->minor_code == X_DRI2Connect && + error->error_code == BadRequest) + return 0; + + return old_handler(dpy, error); +} + +Bool +DRI2Connect(Display * dpy, XID window, char **driverName, char **deviceName) +{ + Bool ret; + XLockDisplay(dpy); + dri2connect_display = dpy; + old_handler = XSetErrorHandler(dri2connect_handler); + ret = doDRI2Connect(dpy, window, driverName, deviceName); + XSetErrorHandler(old_handler); + old_handler = dri2connect_display = NULL; + XUnlockDisplay(dpy); + + return ret; +} + + Bool DRI2Authenticate(Display * dpy, XID window, drm_magic_t magic) {