On Thu, Aug 21, 2008 at 9:00 PM, Vincent Povirk madewokherd+8cd9@gmail.com wrote:
Why doesn't the WM_DESTROY case handle this properly? At first glance, it appears to have code for stopping the running applets and quitting from the main loop.
Calling ExitProcess from WM_CLOSE is anything but graceful.
I am not sure what the right answer is as I've never really tried to fix this type of problem before, WM_DESTROY does not seem to do something right, as even making WM_CLOSE fall through to it produces the same crash. I spent some time trying to debug the problem but got no where so I started just blindly adding PostQuitMessages and ExitProcess calls around the areas in the backtrace until I found something that got rid of the crash. Its easy to replicate, just run control, open the appwiz.cpl and then close the control panel window with the cpl applet still open.
Here is the backtrace
wine: Unhandled page fault on execute access to 0x7e50da00 at address 0x7e50da00 (thread 0009), starting debugger... Unhandled exception: page fault on execute access to 0x7e50da00 in 32-bit code (0x7e50da00). Register dump: CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b EIP:7e50da00 ESP:0033b57c EBP:0033b5a8 EFLAGS:00010206( - 00 - RIP1) EAX:7e50da00 EBX:7eba0574 ECX:00000000 EDX:7e50da00 ESI:00000000 EDI:0001003a Stack dump: 0x0033b57c: 7eb7d8da 0001003a 00000018 00000000 0x0033b58c: 00000000 7ebbfe80 7eba0574 0033b5a8 0x0033b59c: 7eba0574 00000000 0001003a 0033b5e8 0x0033b5ac: 7eb7f738 7e50da00 0001003a 00000018 0x0033b5bc: 00000000 00000000 00000000 0033b5d8 0x0033b5cc: 7eb6f120 7ebbfe80 7eba0574 7eb7f6db Backtrace: =>1 0x7e50da00 (0x0033b5a8) 2 0x7eb7f738 call_dialog_proc+0x68(hwnd=<register EDI not in topmost frame>, msg=0x18, wp=0x0, lp=0x0, result=0x33b618, arg=0x7e50da00) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:479] in user32 (0x0033b5e8) 3 0x7eb82f5a WINPROC_CallDlgProcW+0x5a(func=0xffff0026, hwnd=0x1003a, msg=0x18, wParam=<register EDI not in topmost frame>, lParam=0x0) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:2394] in user32 (0x0033b628) 4 0x7eb0a2d5 DefDlgProcW+0x85(hwnd=<register ESI not in topmost frame>, msg=0x18, wParam=0x0, lParam=0x0) [/home/sedwards/source/wine-git/dlls/user32/defdlg.c:488] in user32 (0x0033b658) 5 0x7eb7d8da WINPROC_wrapper+0x1a() in user32 (0x0033b688) 6 0x7eb7dfce call_window_proc+0x6e(hwnd=<register EDI not in topmost frame>, msg=0x18, wp=0x0, lp=0x0, result=0x33b76c, arg=0x7eb0a250) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:457] in user32 (0x0033b6c8) 7 0x7eb842f1 WINPROC_call_window+0xd1(hwnd=<register ESI not in topmost frame>, msg=0x18, wParam=0x0, lParam=0x0, result=0x33b76c, unicode=0x1, mapping=0x1) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:2207] in user32 (0x0033b708) 8 0x7eb458ca call_window_proc+0xca(hwnd=<register ESI not in topmost frame>, msg=0x18, wparam=0x0, lparam=0x0, unicode=0x1, same_thread=0x1, mapping=0x1) [/home/sedwards/source/wine-git/dlls/user32/message.c:1639] in user32 (0x0033b778) 9 0x7eb48862 send_message+0x222(info=<register EDI not in topmost frame>, res_ptr=0x33b814, unicode=<register ESI not in topmost frame>) [/home/sedwards/source/wine-git/dlls/user32/message.c:2463] in user32 (0x0033b7d8) 10 0x7eb48cda SendMessageW+0x4a(hwnd=0x1003a, msg=0x18, wparam=0x0, lparam=0x0) [/home/sedwards/source/wine-git/dlls/user32/message.c:2586] in user32 (0x0033b818) 11 0x7eb7cd06 show_window+0x4d6(hwnd=0x1003a, cmd=<register ESI not in topmost frame>) [/home/sedwards/source/wine-git/dlls/user32/winpos.c:1046] in user32 (0x0033b888) 12 0x7eb7ce4b ShowWindow+0x3b(hwnd=<register ESI not in topmost frame>, cmd=0x0) [/home/sedwards/source/wine-git/dlls/user32/winpos.c:1154] in user32 (0x0033b8a8) 13 0x7eb724fc DestroyWindow+0x1bc(hwnd=0x1003a) [/home/sedwards/source/wine-git/dlls/user32/win.c:1502] in user32 (0x0033b8e8) 14 0x7ea4e49b PROPSHEET_CleanUp+0xcb(hwndDlg=<is not available>) [/home/sedwards/source/wine-git/dlls/comctl32/propsheet.c:2720] in comctl32 (0x0033b918) 15 0x7ea51ef5 PROPSHEET_DialogProc+0x595(hwnd=0x1002e, uMsg=<register ESI not in topmost frame>, wParam=0x0, lParam=0x0) [/home/sedwards/source/wine-git/dlls/comctl32/propsheet.c:3534] in comctl32 (0x0033bc48) 16 0x7eb7d8da WINPROC_wrapper+0x1a() in user32 (0x0033bc78) 17 0x7eb7f738 call_dialog_proc+0x68(hwnd=<register EDI not in topmost frame>, msg=0x2, wp=0x0, lp=0x0, result=0x33bce8, arg=0x7ea51960) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:479] in user32 (0x0033bcb8) 18 0x7eb82f5a WINPROC_CallDlgProcW+0x5a(func=0xffff0025, hwnd=0x1002e, msg=0x2, wParam=<register EDI not in topmost frame>, lParam=0x0) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:2394] in user32 (0x0033bcf8) 19 0x7eb0a2d5 DefDlgProcW+0x85(hwnd=<register ESI not in topmost frame>, msg=0x2, wParam=0x0, lParam=0x0) [/home/sedwards/source/wine-git/dlls/user32/defdlg.c:488] in user32 (0x0033bd28) 20 0x7eb7d8da WINPROC_wrapper+0x1a() in user32 (0x0033bd58) 21 0x7eb7dfce call_window_proc+0x6e(hwnd=<register EDI not in topmost frame>, msg=0x2, wp=0x0, lp=0x0, result=0x33be3c, arg=0x7eb0a250) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:457] in user32 (0x0033bd98) 22 0x7eb842f1 WINPROC_call_window+0xd1(hwnd=<register ESI not in topmost frame>, msg=0x2, wParam=0x0, lParam=0x0, result=0x33be3c, unicode=0x1, mapping=0x1002e) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:2207] in user32 (0x0033bdd8) 23 0x7eb458ca call_window_proc+0xca(hwnd=<register ESI not in topmost frame>, msg=0x2, wparam=0x0, lparam=0x0, unicode=0x1, same_thread=0x1, mapping=0x1002e) [/home/sedwards/source/wine-git/dlls/user32/message.c:1639] in user32 (0x0033be48) 24 0x7eb48862 send_message+0x222(info=<register EDI not in topmost frame>, res_ptr=0x33bee4, unicode=<register ESI not in topmost frame>) [/home/sedwards/source/wine-git/dlls/user32/message.c:2463] in user32 (0x0033bea8) 25 0x7eb48cda SendMessageW+0x4a(hwnd=0x1002e, msg=0x2, wparam=0x0, lparam=0x0) [/home/sedwards/source/wine-git/dlls/user32/message.c:2586] in user32 (0x0033bee8) 26 0x7eb71186 WIN_SendDestroyMsg+0x66(hwnd=<register ESI not in topmost frame>) [/home/sedwards/source/wine-git/dlls/user32/win.c:1436] in user32 (0x0033bf48) 27 0x7eb72521 DestroyWindow+0x1e1(hwnd=0x1002e) [/home/sedwards/source/wine-git/dlls/user32/win.c:1540] in user32 (0x0033bf88) 28 0x7ea4f8a0 PROPSHEET_PropertySheet+0x2c0(psInfo=0x1381c0, unicode=<is not available>) [/home/sedwards/source/wine-git/dlls/comctl32/propsheet.c:2803] in comctl32 (0x0033bfe8) 29 0x7ea500cf PropertySheetW+0x1cf(lppsh=0x33d080) [/home/sedwards/source/wine-git/dlls/comctl32/propsheet.c:2900] in comctl32 (0x0033c058) 30 0x7e50c930 (0x0033d0f8) 31 0x7ed7e3cd Control_WndProc+0xa3d(hWnd=0x10026, wMsg=0x4e, lParam1=0x3e8, lParam2=0x33e4a0) [/home/sedwards/source/wine-git/dlls/shell32/control.c:501] in shell32 (0x0033e238) 32 0x7eb7d8da WINPROC_wrapper+0x1a() in user32 (0x0033e268) 33 0x7eb7dfce call_window_proc+0x6e(hwnd=<register EDI not in topmost frame>, msg=0x4e, wp=0x3e8, lp=0x33e4a0, result=0x33e34c, arg=0x7ed7d990) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:457] in user32 (0x0033e2a8) 34 0x7eb842f1 WINPROC_call_window+0xd1(hwnd=<register ESI not in topmost frame>, msg=0x4e, wParam=0x3e8, lParam=0x33e4a0, result=0x33e34c, unicode=0x1, mapping=0x1) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:2207] in user32 (0x0033e2e8) 35 0x7eb458ca call_window_proc+0xca(hwnd=<register ESI not in topmost frame>, msg=0x4e, wparam=0x3e8, lparam=0x33e4a0, unicode=0x1, same_thread=0x1, mapping=0x1) [/home/sedwards/source/wine-git/dlls/user32/message.c:1639] in user32 (0x0033e358) 36 0x7eb48862 send_message+0x222(info=<register EDI not in topmost frame>, res_ptr=0x33e3f4, unicode=<register ESI not in topmost frame>) [/home/sedwards/source/wine-git/dlls/user32/message.c:2463] in user32 (0x0033e3b8) 37 0x7eb48cda SendMessageW+0x4a(hwnd=0x10026, msg=0x4e, wparam=0x3e8, lparam=0x33e4a0) [/home/sedwards/source/wine-git/dlls/user32/message.c:2586] in user32 (0x0033e3f8) 38 0x7ea2b89b notify_hdr+0x6b(infoPtr=<register EDI not in topmost frame>, code=0xfffffffd, pnmh=<register ESI not in topmost frame>) [/home/sedwards/source/wine-git/dlls/comctl32/listview.c:737] in comctl32 (0x0033e428) 39 0x7ea3364f notify_click+0x16f(infoPtr=0x1337e8, code=0xfffffffd, lvht=0x33e578) [/home/sedwards/source/wine-git/dlls/comctl32/listview.c:806] in comctl32 (0x0033e4d8) 40 0x7ea33955 LISTVIEW_LButtonDblClk+0xa5(infoPtr=<register EDI not in topmost frame>, wKey=<is not available>, x=0x28, y=0x15) [/home/sedwards/source/wine-git/dlls/comctl32/listview.c:8557] in comctl32 (0x0033e598) 41 0x7ea3ecbe LISTVIEW_WindowProc+0x3de(hwnd=0x1002a, uMsg=0x203, wParam=0x1, lParam=0x15) [/home/sedwards/source/wine-git/dlls/comctl32/listview.c:9926] in comctl32 (0x0033ee98) 42 0x7eb7d8da WINPROC_wrapper+0x1a() in user32 (0x0033eec8) 43 0x7eb7dfce call_window_proc+0x6e(hwnd=<register EDI not in topmost frame>, msg=0x203, wp=0x1, lp=0x150028, result=0x33ef78, arg=0x7ea3e8e0) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:457] in user32 (0x0033ef08) 44 0x7eb842f1 WINPROC_call_window+0xd1(hwnd=<register ESI not in topmost frame>, msg=0x203, wParam=0x1, lParam=0x150028, result=0x33ef78, unicode=0x1, mapping=0x4) [/home/sedwards/source/wine-git/dlls/user32/winproc.c:2207] in user32 (0x0033ef48) 45 0x7eb45186 DispatchMessageW+0x96(msg=<register EDI not in topmost frame>) [/home/sedwards/source/wine-git/dlls/user32/message.c:3125] in user32 (0x0033ef88) 46 0x7ed7f177 Control_RunDLLW+0x3f7(hWnd=0x10020, hInst=0x0, cmd=0x1326f0, nCmdShow=0x5) [/home/sedwards/source/wine-git/dlls/shell32/control.c:620] in shell32 (0x0033fcc8) 47 0x7ed7f76d Control_RunDLLA+0xfd(hWnd=0x10020, hInst=0x0, cmd=0x7ee7eb43, nCmdShow=0x5) [/home/sedwards/source/wine-git/dlls/shell32/control.c:825] in shell32 (0x0033fcf8) 48 0x7ee7e5ea launch+0x3a(what=<register ESI not in topmost frame>) [/home/sedwards/source/wine-git/programs/control/control.c:31] in control (0x0033fd18) 49 0x7ee7e665 WinMain+0x65(hInst=0x7ee70000, hPrev=0x0, lpszCmdLine=0x110860, nCmdShow=0x1) [/home/sedwards/source/wine-git/programs/control/control.c:70] in control (0x0033fe58) 50 0x7ee7e963 main+0xa3() [/home/sedwards/source/wine-git/dlls/winecrt0/exe_main.c:48] in control (0x0033fed8) 51 0x7ee7e88b __wine_spec_exe_entry+0x5b(peb=0x7ffdf000) [/home/sedwards/source/wine-git/dlls/winecrt0/exe_entry.c:36] in control (0x0033ff08) 52 0x7b877ef7 start_process+0xc7(arg=0x0) [/home/sedwards/source/wine-git/dlls/kernel32/process.c:904] in kernel32 (0x0033ffe8)