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