Hi!
I finally narowed down the problem with crashing freereport app while it is initializing freereport dll. I got a workaround, but real fix should be trivial for someone who knows a bit more about wineps driver.
App was crashing int wineps/init.c:PSDRV_UpdateDevCaps at: physDev->horzSize = (physDev->horzRes * 25.4) / physDev->logPixelsX because physDev->logPixelsX == 0
In wineps/init.c:PSDRV_CreateDC I see: physDev->logPixelsX = physDev->pi->ppd->DefaultResolution; physDev->logPixelsY = physDev->pi->ppd->DefaultResolution;
in turn ppd->DefaultResolution is filled in wineps/ppd.c:PSDRV_ParsePPD where it scans for "*DefaultResolution" or "*DefaultJCLResolution" in ppd file.
For me it was /etc/cups/ppd/lp.ppd (HP DeskJet 694C, Foomatic + cdj550) Unfortunatelly there was NO "DefaultResolution" information in it.
For now, because the app has more problems with running (now it hangs) I just added: "DefaultResolution: 20" to this file.
But long term solution would be IMO to check in either ppd.c or CreateDC if adequatly ppd->DefaultResolution or physDev->LogPixels* are not 0.
If they are... hm... no idea - maybe we can somehow calculate some values for that? Surely it shouldn't stay as it is now. Dividing by zero in wine's code is Bad Thing(tm).
Anyone would propose "the right fix" for this?
Regards
Grzegorz B. Prokopski
W liście z śro, 21-08-2002, godz. 16:52, Grzegorz Prokopski pisze:
I finally narowed down the problem with crashing freereport app while it is initializing freereport dll.
While investigating it further I notoiced this:
08072028:Call user32.IsWindowVisible(00010022) ret=40617ef9 08072028:Ret user32.IsWindowVisible() retval=00000000 ret=40617ef9 08072028:Ret user32.EnumThreadWindows() retval=00000001 ret=40617f8e 08072028:Call user32.EnumWindows(40620b8c,404a43bc) ret=40620c32 08072028:Call user32.GetWindow(00010023,00000004) ret=40620ba0 08072028:Ret user32.GetWindow() retval=00010021 ret=40620ba0 08072028:Call user32.GetWindowLongA(00010023,ffffffec) ret=40620bb3 08072028:Ret user32.GetWindowLongA() retval=40010100 ret=40620bb3 08072028:Ret user32.EnumWindows() retval=00000000 ret=40620c32 trace:atom:ATOM_GetAtomNameW (global) c020 -> L"TApplication" 08072028:Ret window proc 0x418a0fef (hwnd=00010021,msg=WM_ENABLE,wp=00000000,lp=00000000) retval=00000000 08072028:Ret user32.EnableWindow() retval=00000000 ret=40617f29 08072028:Ret user32.EnumThreadWindows() retval=00000001 ret=40617f8e 08072028:Call user32.MessageBoxA(00010021,416b3348 "Access violation at address 40D86FC1 in module 'freereport.bpl'. Read of address 00000028.",416a4b14 "greg",00000010) ret=40621e83 [and after many lines it finally hangs in MsgWainForMultipleObjectsEx]
Strange for me is this, that winedbg doesn't get running at this point. Why? How is the error catched then w/o triggering winedbg?
Anyway I ran it with winedbg directly and it crashed. I attached the log. I noticed that there is X11DRV_MsgWaitForMultipleObjectsEx in it, some intensive setting of forms/window positions... It's total mess for me, but maybe for someone more advanced... I'd be glad to hear some advices where to look.
Regards
Grzegorz B. Prokopski
First chance exception: page fault on read access to 0x00000028 in 32-bit code (0x40d86fc1). Register dump: CS:0023 SS:002b DS:002b ES:002b FS:008f GS:1ac7 EIP:40d86fc1 ESP:405b620c EBP:405b6274 EFLAGS:00010296( R- 00 I S -A-P1 ) EAX:00000000 EBX:416a5974 ECX:00000000 EDX:ffffffff ESI:405b6448 EDI:00000000 Stack dump: 0x405b620c (_end+0x25b834): 405b6290 40d874c6 405b6274 00000000 0x405b621c (_end+0x25b844): 405b6448 00000000 416a4f4c 405b6264 0x405b622c (_end+0x25b854): 405b6278 00000000 00000000 416a5974 0x405b623c (_end+0x25b864): 416a5974 4061b28c 00000000 405b6448 0x405b624c (_end+0x25b874): 40d865bc 40634229 405b6290 40634246 0x405b625c (_end+0x25b884): 4063424e 416a5974 00000000 00000021 0x405b626c (_end+0x25b894):
0011: sel=008f base=401101a0 limit=00000fff 32-bit rw- Backtrace: =>0 0x40d86fc1 (FREEREPORT.BPL.@Fr_view@TPreviewForm@FormResize$qqrp14System@TObject+0x5d in C:\PROGRAM FILES\SENTE ESYSTEM\FREEREPORT.BPL) (ebp=405b6274) 1 0x406309ab (VCL50.BPL.@Controls@TControl@Resize$qqrv+0x1b in C:\WINDOWS\SYSTEM\VCL50.BPL) (ebp=405b62a4) 2 0x406327c4 (VCL50.BPL.@Controls@TControl@WndProc$qqrr17Messages@TMessage+0x114 in C:\WINDOWS\SYSTEM\VCL50.BPL) (ebp=405b63e8) 3 0x4061b117 (VCL50.BPL.@Forms@TCustomForm@WndProc$qqrr17Messages@TMessage+0x3af in C:\WINDOWS\SYSTEM\VCL50.BPL) (ebp=405b6410) 4 0x40634f7b (VCL50.BPL.@Controls@TWinControl@MainWndProc$qqrr17Messages@TMessage+0x2f in C:\WINDOWS\SYSTEM\VCL50.BPL) (ebp=405b6440) 5 0x406181d6 (VCL50.BPL.@Forms@SetAutoSubClass$qqro+0x1a in C:\WINDOWS\SYSTEM\VCL50.BPL) (ebp=405b6458) 6 0x408c8957 (WINPROC_wrapper+0x17 in user32.dll.so) (ebp=405b647c) 7 0x408c89ed (WINPROC_CallWndProc+0x8d(proc=0x418a0fd5, hwnd=0x10024, msg=0x5, wParam=0x2, lParam=0xd50138) [winproc.c:183] in user32.dll.so) (ebp=405b64ac) 8 0x408ce6e8 (WINPROC_CallProc32WTo32A+0xbc(func=0x418a0fd5, hwnd=0x10024, msg=0x5, wParam=0x2, lParam=0xd50138) [winproc.c:2615] in user32.dll.so) (ebp=405b64d8) 9 0x408cec08 (CallWindowProcW+0x88(func=0x413f07c6, hwnd=0x10024, msg=0x5, wParam=0x2, lParam=0xd50138) [winproc.c:2830] in user32.dll.so) (ebp=405b6500) 10 0x408dd7ab (call_window_proc+0xd3(hwnd=0x10024, msg=0x5, wparam=0x2, lparam=0xd50138, unicode=0x1) [message.c:1368] in user32.dll.so) (ebp=405b6550) 11 0x408de30d (SendMessageTimeoutW+0xdd(hwnd=0x10024, msg=0x5, wparam=0x2, lparam=0xd50138, flags=0x0, timeout=0xffffffff, res_ptr=0x405b65d4) [message.c:1736] in user32.dll.so) (ebp=405b65a4) 12 0x408de585 (SendMessageW+0x39(hwnd=0x10024, msg=0x5, wparam=0x2, lparam=0xd50138) [message.c:1818] in user32.dll.so) (ebp=405b65d8) 13 0x408a2013 (DEFWND_HandleWindowPosChanged+0xb3(hwnd=0x10024, flags=0x103a) [defwnd.c:71] in user32.dll.so) (ebp=405b660c) 14 0x408a35c1 (DefWindowProcA+0x1a9(hwnd=0x10024, msg=0x47, wParam=0x0, lParam=0x405b6ab0) [defwnd.c:785] in user32.dll.so) (ebp=405b6638) 15 0x408c8957 (WINPROC_wrapper+0x17 in user32.dll.so) (ebp=405b665c) 16 0x408c89ed (WINPROC_CallWndProc+0x8d(proc=0x405d1e8c, hwnd=0x10024, msg=0x47, wParam=0x0, lParam=0x405b6ab0) [winproc.c:183] in user32.dll.so) (ebp=405b668c) 17 0x408ceadb (CallWindowProcA+0x3b(func=0x405d1e8c, hwnd=0x10024, msg=0x47, wParam=0x0, lParam=0x405b6ab0) [winproc.c:2779] in user32.dll.so) (ebp=405b66b4) 18 0x40635453 (VCL50.BPL.@Controls@TWinControl@DefaultHandler$qqrpv+0xcf in C:\WINDOWS\SYSTEM\VCL50.BPL) (ebp=405b684c) 19 0x4061b117 (VCL50.BPL.@Forms@TCustomForm@WndProc$qqrr17Messages@TMessage+0x3af in C:\WINDOWS\SYSTEM\VCL50.BPL) (ebp=405b6874) 20 0x40634f7b (VCL50.BPL.@Controls@TWinControl@MainWndProc$qqrr17Messages@TMessage+0x2f in C:\WINDOWS\SYSTEM\VCL50.BPL) (ebp=405b68a4) 21 0x406181d6 (VCL50.BPL.@Forms@SetAutoSubClass$qqro+0x1a in C:\WINDOWS\SYSTEM\VCL50.BPL) (ebp=405b68bc) 22 0x408c8957 (WINPROC_wrapper+0x17 in user32.dll.so) (ebp=405b68e0) 23 0x408c89ed (WINPROC_CallWndProc+0x8d(proc=0x418a0fd5, hwnd=0x10024, msg=0x47, wParam=0x0, lParam=0x405b6ab0) [winproc.c:183] in user32.dll.so) (ebp=405b6910) 24 0x408ceadb (CallWindowProcA+0x3b(func=0x418a0fd5, hwnd=0x10024, msg=0x47, wParam=0x0, lParam=0x405b6ab0) [winproc.c:2779] in user32.dll.so) (ebp=405b6938) 25 0x408dd7d3 (call_window_proc+0xfb(hwnd=0x10024, msg=0x47, wparam=0x0, lparam=0x405b6ab0, unicode=0x0) [message.c:1372] in user32.dll.so) (ebp=405b6988) 26 0x408de466 (SendMessageTimeoutA+0xea(hwnd=0x10024, msg=0x47, wparam=0x0, lparam=0x405b6ab0, flags=0x0, timeout=0xffffffff, res_ptr=0x405b6a10, hwnd=0x10024) [message.c:1784] in user32.dll.so) (ebp=405b69e0) 27 0x408de5cd (SendMessageA+0x39(hwnd=0x10024, msg=0x47, wparam=0x0, lparam=0x405b6ab0) [message.c:1829] in user32.dll.so) (ebp=405b6a14) 28 0x40e64cc8 (X11DRV_SetWindowPos+0x588(winpos=0x405b6ab0) [winpos.c:993] in x11drv.dll.so) (ebp=405b6a98) 29 0x408c83ef (SetWindowPos+0x77(hwnd=0x10024, hwndInsertAfter=0x0, x=0x0, y=0x0, cx=0x140, cy=0xf0, flags=0x80000012) [winpos.c:1535] in user32.dll.so) (ebp=405b6acc) 30 0x40e65c06 (X11DRV_ConfigureNotify+0x2ae(hwnd=0x10024, event=0x405b6bc0) [winpos.c:1564] in x11drv.dll.so) (ebp=405b6b44) 31 0x40e5bd25 (EVENT_ProcessEvent+0x451(event=0x405b6bc0) [event.c:321] in x11drv.dll.so) (ebp=405b6ba0) 32 0x40e5b791 (process_events+0x41(data=0x403c51b8) [event.c:148] in x11drv.dll.so) (ebp=405b6c20) 33 0x40e5b88a (X11DRV_MsgWaitForMultipleObjectsEx+0xc6(count=0x0, handles=0x0, timeout=0x0, mask=0x0, flags=0x0) [event.c:179] in x11drv.dll.so) (ebp=405b6d4c) 34 0x408deb6f (PeekMessageW+0x33(msg_out=0x405b6df0, hwnd=0x0, first=0x0, last=0x0, flags=0x1) [message.c:2068] in user32.dll.so) (ebp=405b6d98) 35 0x408decab (PeekMessageA+0x27(msg=0x405b6df0, hwnd=0x0, first=0x0, last=0x0, flags=0x1) [message.c:2126] in user32.dll.so) (ebp=405b6dc0) 36 0x40621a1c (VCL50.BPL.@Forms@TApplication@ProcessMessage$qqrr6tagMSG+0x18 in C:\WINDOWS\SYSTEM\VCL50.BPL) (ebp=405b6e24) 37 0x004015f8 (greg.exe.__GetExceptDLLinfo+0x59f in C:\Program Files\Sente eSystem\greg.exe) (ebp=405b6e64) 38 0x3257dbef (CC3250MT.DLL.__startup+0x14f in C:\WINDOWS\SYSTEM\CC3250MT.DLL) (ebp=405b6e94)
0x40d86fc1 (FREEREPORT.BPL.@Fr_view@TPreviewForm@FormResize$qqrp14System@TObject+0x5d in C:\PROGRAM FILES\SENTE ESYSTEM\FREEREPORT.BPL): movl 0x28(%eax),%eax
On 21 Aug 2002, Grzegorz Prokopski wrote: [...]
08072028:Call user32.MessageBoxA(00010021,416b3348 "Access violation at address 40D86FC1 in module 'freereport.bpl'. Read of address 00000028.",416a4b14 "greg",00000010) ret=40621e83 [and after many lines it finally hangs in MsgWainForMultipleObjectsEx]
Strange for me is this, that winedbg doesn't get running at this point. Why? How is the error catched then w/o triggering winedbg?
Seems like the application has an exception handler and simply catches the exception. In that case winedbg will not be triggered unless it is already running and you have it set to be triggered on first chance exceptions (should be described somewhere in the doc).
-- Francois Gouget fgouget@free.fr http://fgouget.free.fr/ Good judgment comes from experience, and experience comes from bad judgment -- Barry LePatner