xnest: Ignore GetImage() error in xnestGetImage()
When an Xnest instance is not viewable it will crash when a client in that instance calls GetImage. This is because the Xnest server will itself receives a BadMatch error. This patch ignores the error. The application which has requested the image will receive garbage - this however is fully legal according to the specs as obscured areas will always contain garbage if there isn't some sort of backing store as discussed in https://bugs.freedesktop.org/show_bug.cgi?id=9488 The applied patch is a version from Dadek Doulik. v2: Call XSync() before changing error handlers as suggested by Daniel Stone <daniel@fooishbar.org>. Reviewed-by: Daniel Stone <daniel@fooishbar.org> Signed-off-by: Egbert Eich <eich@freedesktop.org>
This commit is contained in:
parent
b902c8abb6
commit
65fca55884
|
@ -94,15 +94,29 @@ xnestPutImage(DrawablePtr pDrawable, GCPtr pGC, int depth, int x, int y,
|
|||
}
|
||||
}
|
||||
|
||||
static int
|
||||
xnestIgnoreErrorHandler (Display *display,
|
||||
XErrorEvent *event)
|
||||
{
|
||||
return False; /* return value is ignored */
|
||||
}
|
||||
|
||||
void
|
||||
xnestGetImage(DrawablePtr pDrawable, int x, int y, int w, int h,
|
||||
unsigned int format, unsigned long planeMask, char *pImage)
|
||||
{
|
||||
XImage *ximage;
|
||||
int length;
|
||||
int (*old_handler)(Display*, XErrorEvent*);
|
||||
|
||||
/* we may get BadMatch error when xnest window is minimized */
|
||||
XSync(xnestDisplay, False);
|
||||
old_handler = XSetErrorHandler (xnestIgnoreErrorHandler);
|
||||
|
||||
ximage = XGetImage(xnestDisplay, xnestDrawable(pDrawable),
|
||||
x, y, w, h, planeMask, format);
|
||||
XSync(xnestDisplay, False);
|
||||
XSetErrorHandler(old_handler);
|
||||
|
||||
if (ximage) {
|
||||
length = ximage->bytes_per_line * ximage->height;
|
||||
|
|
Loading…
Reference in New Issue