[Mesa-dev] [PATCH] glx/dri2: Paper over errors in DRI2Connect when indirect (#28125)
Kristian Høgsberg
krh at bitplanet.net
Thu May 26 14:39:54 PDT 2011
On Tue, May 24, 2011 at 6:10 PM, Adam Jackson <ajax at redhat.com> wrote:
> 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.
Can you just handle it in DRI2Error in dri2.c?
> Signed-off-by: Adam Jackson <ajax at redhat.com>
> ---
> src/glx/dri2.c | 41 +++++++++++++++++++++++++++++++++++++++--
> 1 files changed, 39 insertions(+), 2 deletions(-)
>
> diff --git a/src/glx/dri2.c b/src/glx/dri2.c
> index adfd3d1..00a2cb4 100644
> --- a/src/glx/dri2.c
> +++ b/src/glx/dri2.c
> @@ -244,8 +244,8 @@ DRI2QueryVersion(Display * dpy, int *major, int *minor)
> 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,43 @@ DRI2Connect(Display * dpy, XID window, char **driverName, char **deviceName)
> return True;
> }
>
> +/* swallow errors from DRI2Connect for non-local */
> +
> +static Display *dri2connect_display;
> +static int (*old_handler)(Display *, XErrorEvent *);
> +static XExtDisplayInfo *dri2connect_info;
> +
> +static int
> +dri2connect_handler(Display *dpy, XErrorEvent *error)
> +{
> + if (dpy == dri2connect_display &&
> + error->request_code == dri2connect_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_info = DRI2FindDisplay(dpy);
> + dri2connect_display = dpy;
> + old_handler = XSetErrorHandler(dri2connect_handler);
> + ret = doDRI2Connect(dpy, window, driverName, deviceName);
> + XSetErrorHandler(old_handler);
> + old_handler = NULL;
> + dri2connect_display = NULL;
> + dri2connect_info = NULL;
> + XUnlockDisplay(dpy);
> +
> + return ret;
> +}
> +
> Bool
> DRI2Authenticate(Display * dpy, XID window, drm_magic_t magic)
> {
> --
> 1.7.5.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list