Small X11DRV patch

Lionel Ulmer lionel.ulmer at free.fr
Sat Jul 13 13:24:05 CDT 2002


Hi all,

This patch will prevent Wine to crash with an X11 error when remote
displaying to a XFree 4.2 server with DGA / XVidMode enabled.

Changelog:
 Test for X11 errors for DGA2 and XVidMode extensions

-- 
		 Lionel Ulmer - http://www.bbrox.org/
-------------- next part --------------
Index: dlls/x11drv/dga2.c
===================================================================
RCS file: /home/wine/wine/dlls/x11drv/dga2.c,v
retrieving revision 1.9
diff -u -r1.9 dga2.c
--- dlls/x11drv/dga2.c	31 May 2002 23:40:57 -0000	1.9
+++ dlls/x11drv/dga2.c	13 Jul 2002 18:22:42 -0000
@@ -58,9 +58,15 @@
         info->dwWidth, info->dwHeight, info->dwBPP, info->wRefreshRate);
 }
 
+static int DGA2ErrorHandler(Display *dpy, XErrorEvent *event, void *arg)
+{
+    return 1;
+}
+
 void X11DRV_XF86DGA2_Init(void)
 {
   int nmodes, major, minor, i;
+  Bool ok;
 
   if (xf86dga2_modes) return; /* already initialized? */
 
@@ -71,7 +77,10 @@
 
   if (!TSXDGAQueryExtension(gdi_display, &dga_event, &dga_error)) return;
 
-  if (!TSXDGAQueryVersion(gdi_display, &major, &minor)) return;
+  X11DRV_expect_error(gdi_display, DGA2ErrorHandler, NULL);
+  ok = TSXDGAQueryVersion(gdi_display, &major, &minor);
+  if (X11DRV_check_error()) ok = FALSE;
+  if (!ok) return;
 
   if (major < 2) return; /* only bother with DGA 2+ */
 
Index: dlls/x11drv/xvidmode.c
===================================================================
RCS file: /home/wine/wine/dlls/x11drv/xvidmode.c,v
retrieving revision 1.14
diff -u -r1.14 xvidmode.c
--- dlls/x11drv/xvidmode.c	28 Mar 2002 22:22:06 -0000	1.14
+++ dlls/x11drv/xvidmode.c	13 Jul 2002 18:22:42 -0000
@@ -93,9 +93,15 @@
   info->dwAlphaBitMask = 0;
 }
 
+static int XVidModeErrorHandler(Display *dpy, XErrorEvent *event, void *arg)
+{
+    return 1;
+}
+
 void X11DRV_XF86VM_Init(void)
 {
   int nmodes, i;
+  Bool ok;
 
   if (xf86vm_major) return; /* already initialized? */
 
@@ -106,7 +112,10 @@
 
   /* see if XVidMode is available */
   if (!TSXF86VidModeQueryExtension(gdi_display, &xf86vm_event, &xf86vm_error)) return;
-  if (!TSXF86VidModeQueryVersion(gdi_display, &xf86vm_major, &xf86vm_minor)) return;
+  X11DRV_expect_error(gdi_display, XVidModeErrorHandler, NULL);
+  ok = TSXF86VidModeQueryVersion(gdi_display, &xf86vm_major, &xf86vm_minor);
+  if (X11DRV_check_error()) ok = FALSE;
+  if (!ok) return;  
 
 #ifdef X_XF86VidModeSetGammaRamp
   if (xf86vm_major > 2 || (xf86vm_major == 2 && xf86vm_minor >= 1))


More information about the wine-patches mailing list