xrender patch

Huw D M Davies h.davies1 at physics.ox.ac.uk
Thu May 2 03:36:49 CDT 2002


On Wed, May 01, 2002 at 09:02:00PM -0700, Duane Clark wrote:
> The xrender CVS patch of 4/23 is causing one of my apps to crash:
> 
> Unhandled exception: page fault on read access to 0x00000000 in 32-bit 
> code (0x438198ee).
> In 32-bit mode.
> Symbol h_errno is invalid
> Symbol __strtol_internal is invalid
> 0x438198ee (_end+0x2ce2726 in libXrender.so): movl      0x0(%eax),%eax
> Wine-dbg>bt
> Backtrace:
> =>0 0x438198ee (_end+0x2ce2726 in libXrender.so) (ebp=405b60c4)
>    1 0x40af71cf (X11DRV_XRender_ExtTextOut+0x1103(physDev=0x40399e44, 
> x=0x0, y=0x2c, flags=0x0, lprect=0x0, wstr=0x4039a6b0, count=0xc, 

I think you have a buggy version of libXrender.so.  Could you check
that this patch stops the crash?  Unfortunately it will disable client
side font rendering.  Jeremy came up with a truely horrible hack to
workaround this problem but for some reason that I can't possibly
imagine Alexandre left it out when he committed the last xrender
changes <g>.

Huw.
-- 
Huw Davies
huw at codeweavers.com
-------------- next part --------------
Index: dlls/x11drv/xrender.c
===================================================================
RCS file: /home/wine/wine/dlls/x11drv/xrender.c,v
retrieving revision 1.6
diff -u -r1.6 xrender.c
--- dlls/x11drv/xrender.c	3 Apr 2002 22:08:27 -0000	1.6
+++ dlls/x11drv/xrender.c	2 May 2002 08:27:58 -0000
@@ -95,6 +95,14 @@
         X11DRV_XRender_Installed = TRUE;
 	TRACE("Xrender is up and running error_base = %d\n", error_base);
 	screen_format = TSXRenderFindVisualFormat(gdi_display, visual);
+	if(!screen_format) { /* This fails in buggy versions of libXrender.so */
+	    WINE_MESSAGE(
+	     "Wine has detected that you probably have a buggy version\n"
+	     "of libXrender.so .  Because of this client side font rendering\n"
+	     "will be disabled.  Please upgrade this library.\n");
+	    X11DRV_XRender_Installed = FALSE;
+	    return;
+	};
 	pf.type = PictTypeDirect;
 	pf.depth = 1;
 	pf.direct.alpha = 0;
@@ -102,7 +110,11 @@
 	mono_format = TSXRenderFindFormat(gdi_display, PictFormatType |
 					  PictFormatDepth | PictFormatAlpha |
 					  PictFormatAlphaMask, &pf, 0);
-
+	if(!mono_format) {
+	    ERR("mono_format == NULL?\n");
+	    X11DRV_XRender_Installed = FALSE;
+	    return;
+	}
 	glyphsetCache = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
 				  sizeof(*glyphsetCache) * INIT_CACHE_SIZE);
 


More information about the wine-devel mailing list