[Bug 5161] Trillian: crash when showing main window: BadValue in
X_CreatePixmap
Wine Bugs
wine-bugs at winehq.org
Thu May 4 05:02:34 CDT 2006
http://bugs.winehq.org/show_bug.cgi?id=5161
------- Additional Comments From molle.bestefich at gmail.com 2006-04-05 05:02 -------
A +relay trace shows error occurs in CreateDIBSection:
0009:Call winex11.drv.CreateDIBSection(7fd79bf8,00007ebc,7fbcbf9c,00000000)
ret=7f8b35ae
0009:Call ntdll.RtlAllocateHeap(7fce0000,00000008,00000060) ret=7f267550
0009:Ret ntdll.RtlAllocateHeap() retval=7fd79d78 ret=7f267550
0009:Call gdi32.GetObjectW(00007ebc,00000054,7fbcbcb0) ret=7f27a130
0009:Ret gdi32.GetObjectW() retval=00000054 ret=7f27a130
X Error of failed request: BadValue (integer parameter out of range for
operation)
Major opcode of failed request: 53 (X_CreatePixmap)
Value in failed request: 0x0
Serial number of failed request: 633802
Current serial number in output stream: 634565
Added a trace:
--- dlls/x11drv/dib.c.orig
+++ dlls/x11drv/dib.c
@@ -4674,2 +4674,3 @@
physBitmap->pixmap_depth = (dib.dsBm.bmBitsPixel == 1) ? 1 :
screen_depth;
+ TRACE("(%p) %dx%d %d bpp\n", hbitmap, dib.dsBm.bmWidth,
dib.dsBm.bmHeight, physBitmap->pixmap_depth);
physBitmap->pixmap = XCreatePixmap( gdi_display, root_window,
dib.dsBm.bmWidth,
Gives normal (?) values:
trace:bitmap:DIB_CreateDIBSection format (10,-200), planes 1, bpp 32, size 0,
RGB
trace:bitmap:CreateBitmapIndirect 10x200, 65536 colors returning 0x7e28
trace:bitmap:X11DRV_CreateDIBSection (0x7e28) 10x200 16 bpp
X Error of failed request: BadValue (integer parameter out of range for
operation)
Major opcode of failed request: 53 (X_CreatePixmap)
Value in failed request: 0x0
Serial number of failed request: 627920
Current serial number in output stream: 628685
The above does look a _little_ odd. Comparison:
DIB_CreateDIBSection 10, -200, 32 bpp
X11DRV_CreateDIBSection 10, 200, 16 bpp
But I'm unsure whether to worry about it.
I think that xorg-server-1.0.2-r3/dix/dispatch.c (attaching momentarily) is
where the failure happens.
Looking at the source, there are two places where BadValue can be returned.
One of them sets errorValue to bit depth, which would be odd (we're seeing
errorValue == 0).
The other sets errorValue explicitly to 0, so I think it's more likely to be
the culprit.
Code looks like this:
if (!stuff->width || !stuff->height)
{
client->errorValue = 0;
return BadValue;
}
Unless width/height got corrupted on the way (I don't know how it propagates
from x11drv to dispatch.c), this statement fails:
if (!10 || !200)
That would be odd, wouldn't it?
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
More information about the wine-bugs
mailing list