[PATCH] Return BadWindow instead of BadMatch from dixLookupWindow
Julien Cristau
jcristau at debian.org
Sat Jun 5 07:41:42 PDT 2010
From: Ben Hutchings <ben at decadent.org.uk>
BadMatch is not a documented error code for XGetWindowProperty which
sends X_GetProperty requests. However, the implementation in Xorg
appears to return BadMatch if and only if it's passed a reference to a
drawable that isn't a window.
I don't understand how the server coordinates window changes with the
WM. Is it possible that a window can be completely deleted before the
WM has handled it? In that case there is presumably a race condition
where a window could disppear and another drawable be created with the
same id.
I would suggest the following change. This is untested because the
BadWindow or BadMatch error is dependent on a race condition if I
understand correctly. But it's "obviously correct". :-)
Debian bug#491979 <http://bugs.debian.org/491979>
---
Ben sent this patch to the Debian bug in 2008, but this seems to still
apply to the current code. The initial report was a ion3 crash because
it got unexpected BadMatch errors from XGetWindowProperty.
dix/dixutils.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/dix/dixutils.c b/dix/dixutils.c
index 51dbd14..f7d032a 100644
--- a/dix/dixutils.c
+++ b/dix/dixutils.c
@@ -225,7 +225,7 @@ dixLookupWindow(WindowPtr *pWin, XID id, ClientPtr client, Mask access)
{
int rc;
rc = dixLookupDrawable((DrawablePtr*)pWin, id, client, M_WINDOW, access);
- return (rc == BadDrawable) ? BadWindow : rc;
+ return (rc == BadDrawable || rc == BadMatch) ? BadWindow : rc;
}
int
--
1.7.1
More information about the xorg-devel
mailing list