From a93d2d4f910dc66fe7114a4f44bf8098e3f7ae7a Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Mon, 5 May 2014 13:03:14 +0100 Subject: [PATCH] intel-virtual-output: Check for errors whilst creating ShmPixmaps Creating a ShmPixmap may cause an asynchronous BadAccess error, so wrap the construction with XSync and check for an error before proceeding. Signed-off-by: Chris Wilson References: https://bugs.freedesktop.org/show_bug.cgi?id=78293 --- tools/virtual.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/virtual.c b/tools/virtual.c index b2f3069f..8803feab 100644 --- a/tools/virtual.c +++ b/tools/virtual.c @@ -827,6 +827,9 @@ static void output_init_xfer(struct clone *clone, struct output *output) { if (output->use_shm_pixmap) { DBG(("%s-%s: creating shm pixmap\n", DisplayString(output->dpy), output->name)); + XSync(output->dpy, False); + _x_error_occurred = 0; + if (output->pixmap) XFreePixmap(output->dpy, output->pixmap); output->pixmap = XShmCreatePixmap(output->dpy, output->window, @@ -836,6 +839,13 @@ static void output_init_xfer(struct clone *clone, struct output *output) XRenderFreePicture(output->dpy, output->pix_picture); output->pix_picture = None; } + + XSync(output->dpy, False); + if (_x_error_occurred) { + XFreePixmap(output->dpy, output->pixmap); + output->pixmap = None; + output->use_shm_pixmap = 0; + } } if (output->use_render) { DBG(("%s-%s: creating picture\n", DisplayString(output->dpy), output->name));