I got a report of a weird and unreproducible error in Ion3 startup: http://bugs.debian.org/490601
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: http://gitweb.freedesktop.org/?p=xorg/xserver.git;a=blob;hb=8822110d7d6b684f373fc883aeb7cab9734e9ddb;f=dix/dixutils.c#l197 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. This seems like a bug in Xorg, but we presumably need to work around it. The obvious patch is below. Ben. --- ion3.orig/ioncore/rootwin.c +++ ion3/ioncore/rootwin.c @@ -58,10 +58,11 @@ static char msg[128], request[64], num[32]; /* Just ignore bad window and similar errors; makes the rest of - * the code simpler. + * the code simpler. Due to a Xorg bug, window lookups may fail + * with BadMatch instead of BadWindow. */ if((ev->error_code==BadWindow || - (ev->error_code==BadMatch && ev->request_code==X_SetInputFocus) || + ev->error_code==BadMatch || (ev->error_code==BadDrawable && ev->request_code==X_GetGeometry)) && ignore_badwindow) return 0; --- END --- -- Ben Hutchings Once a job is fouled up, anything done to improve it makes it worse.
signature.asc
Description: This is a digitally signed message part
