[PATCH] shell32 - handle WM_CLOSE in the Control Panel window (fixed)

Steven Edwards winehacker at gmail.com
Thu Aug 21 21:26:19 CDT 2008


On Thu, Aug 21, 2008 at 9:00 PM, Vincent Povirk
<madewokherd+8cd9 at 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)


-- 
Steven Edwards

"There is one thing stronger than all the armies in the world, and
that is an idea whose time has come." - Victor Hugo



More information about the wine-devel mailing list