glx/dri2: Paper over errors in DRI2Connect when indirect
authorChristopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Thu, 4 Aug 2011 02:06:13 +0000 (12:06 +1000)
committerEric Anholt <eric@anholt.net>
Fri, 5 Aug 2011 17:11:05 +0000 (10:11 -0700)
DRI2 will throw BadRequest for this when the client is not local, but
DRI2 is an implementation detail and not something callers should have
to know about.  Silently swallow errors in this case, and just propagate
the failure through DRI2Connect's return code.

Note: This is a candidate for the stable release branches.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=28125
Signed-off-by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
src/glx/dri2.c

index 229840d69195fcff74f674ddefb666d5bad93b3e..b1b5013d048ca98ca8662c1ef5ecdc789eab095f 100644 (file)
@@ -190,6 +190,15 @@ DRI2Error(Display *display, xError *err, XExtCodes *codes, int *ret_code)
        err->minorCode == X_DRI2DestroyDrawable)
        return True;
 
+    /* If the server is non-local DRI2Connect will raise BadRequest.
+     * Swallow this so that DRI2Connect can signal this in its return code */
+    if (err->majorCode == codes->major_opcode &&
+        err->minorCode == X_DRI2Connect &&
+        err->errorCode == BadRequest) {
+       *ret_code = False;
+       return True;
+    }
+
     return False;
 }