Dylan Taft wrote:
http://veracity.ath.cx/~diefool/failure.gz Log is about 100 megs unzipped.
This is pretty bizzare. I gzipped a +all log. When a joystick is plugged into my machine, many dinput apps crash with meaningless backtraces unrelated to dinput.
It affects a fair amount of apps http://www.blockland.us/blockland/index.asp is an easy one to work on since it crashes as soon as the program starts. It also only crashes when my joystick is plugged in and wine can see /dev/js0.
0047:trace:dinput:create_DataFormat Matching : 0047:trace:dinput:create_DataFormat - Asked (5) : 0047:trace:dinput:create_DataFormat * GUID: {a36d02e3-c9f3-11cf-bfc7-444553540000} ('GUID_RzAxis') 0047:trace:dinput:create_DataFormat * Offset: 20 0047:trace:dinput:create_DataFormat * dwType: 00000603 0047:trace:dinput:create_DataFormat Type: DIDFT_RELAXIS DIDFT_ABSAXIS / Instance: 6 0047:trace:dinput:create_DataFormat - Wine (5) : 0047:trace:dinput:create_DataFormat * GUID: {a36d02e3-c9f3-11cf-bfc7-444553540000} ('GUID_RzAxis') 0047:trace:dinput:create_DataFormat * Offset: 20 0047:trace:dinput:create_DataFormat * dwType: 80ffff03 0047:trace:dinput:create_DataFormat Type: DIDFT_RELAXIS DIDFT_ABSAXIS (unhandled: 80000000) / Instance: DIDFT_ANYINSTANCE 0047:trace:seh:EXC_RtlRaiseException code=c0000005 flags=0 addr=0x7e98f3a8 0047:trace:seh:EXC_RtlRaiseException info[0]=00000000 0047:trace:seh:EXC_RtlRaiseException info[1]=00000000 0047:trace:seh:EXC_RtlRaiseException eax=00000010 ebx=7e9aa5d8 ecx=00000010 edx=77c5bd50 esi=00000000 edi=7eda3bcc 0047:trace:seh:EXC_RtlRaiseException ebp=77aefad4 esp=77aefa3c cs=0073 ds=007b es=007b fs=003b gs=0033 flags=00010216 0047:trace:seh:EXC_CallHandler calling handler at 0x6437c8 code=c0000005 flags=0 0047:Call kernel32.UnhandledExceptionFilter(77aef5e8) ret=00649b15
I think this is where it gives up in the log. ^^
I'd like to debug this, anyone know where to start?
__________________________________ Do you Yahoo!? Yahoo! Small Business - Try our new resources site! http://smallbusiness.yahoo.com/resources/
Could you try this patch?
Index: dlls/dinput/device.c =================================================================== RCS file: /home/wine/wine/dlls/dinput/device.c,v retrieving revision 1.25 diff -u -p -r1.25 device.c --- dlls/dinput/device.c 24 Mar 2005 21:01:39 -0000 1.25 +++ dlls/dinput/device.c 16 Apr 2005 01:25:51 -0000 @@ -289,34 +289,35 @@ DataFormat *create_DataFormat(const DIDA int *done; int index = 0; DWORD next = 0; - + ret = HeapAlloc(GetProcessHeap(), 0, sizeof(DataFormat)); - + done = HeapAlloc(GetProcessHeap(), 0, sizeof(int) * asked_format->dwNumObjs); memset(done, 0, sizeof(int) * asked_format->dwNumObjs); - + dt = HeapAlloc(GetProcessHeap(), 0, asked_format->dwNumObjs * sizeof(DataTransform)); - + TRACE("Creating DataTransform : \n");
for (i = 0; i < wine_format->dwNumObjs; i++) { offset[i] = -1; - + for (j = 0; j < asked_format->dwNumObjs; j++) { if (done[j] == 1) continue; - + if (/* Check if the application either requests any GUID and if not, it if matches * the GUID of the Wine object. */ ((asked_format->rgodf[j].pguid == NULL) || + (wine_format->rgodf[i].pguid == NULL) || (IsEqualGUID(wine_format->rgodf[i].pguid, asked_format->rgodf[j].pguid))) && (/* Then check if it accepts any instance id, and if not, if it matches Wine's * instance id. */ ((asked_format->rgodf[j].dwType & 0x00FFFF00) == DIDFT_ANYINSTANCE) || - (wine_format->rgodf[i].dwType & asked_format->rgodf[j].dwType))) { + ((wine_format->rgodf[i].dwType & asked_format->rgodf[j].dwType)) & 0x00FFFF00)) { done[j] = 1; @@ -329,19 +330,19 @@ DataFormat *create_DataFormat(const DIDA TRACE(" * dwType: %08lx\n", asked_format->rgodf[j].dwType); TRACE(" "); _dump_EnumObjects_flags(asked_format->rgodf[j].dwType); TRACE("\n"); - TRACE(" - Wine (%d) :\n", j); + TRACE(" - Wine (%d) :\n", i); TRACE(" * GUID: %s ('%s')\n", - debugstr_guid(wine_format->rgodf[j].pguid), - _dump_dinput_GUID(wine_format->rgodf[j].pguid)); - TRACE(" * Offset: %3ld\n", wine_format->rgodf[j].dwOfs); - TRACE(" * dwType: %08lx\n", wine_format->rgodf[j].dwType); - TRACE(" "); _dump_EnumObjects_flags(wine_format->rgodf[j].dwType); TRACE("\n"); + debugstr_guid(wine_format->rgodf[i].pguid), + _dump_dinput_GUID(wine_format->rgodf[i].pguid)); + TRACE(" * Offset: %3ld\n", wine_format->rgodf[i].dwOfs); + TRACE(" * dwType: %08lx\n", wine_format->rgodf[i].dwType); + TRACE(" "); _dump_EnumObjects_flags(wine_format->rgodf[i].dwType); TRACE("\n"); if (wine_format->rgodf[i].dwType & DIDFT_BUTTON) dt[index].size = sizeof(BYTE); else dt[index].size = sizeof(DWORD); - dt[index].offset_in = wine_format ->rgodf[i].dwOfs; + dt[index].offset_in = wine_format->rgodf[i].dwOfs; if (asked_format->rgodf[j].dwOfs < next) { WARN("bad format: dwOfs=%ld, changing to %ld\n", asked_format->rgodf[j].dwOfs, next); dt[index].offset_out = next;