Vincent Povirk : wineboot: Don' t abort shutdown if we have to terminate a process.

Alexandre Julliard julliard at winehq.org
Fri Jul 23 10:05:42 CDT 2010


Module: wine
Branch: master
Commit: da8904d150694ba82b201ec72e2e94cba9dd4475
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=da8904d150694ba82b201ec72e2e94cba9dd4475

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Thu Jul 22 16:49:35 2010 -0500

wineboot: Don't abort shutdown if we have to terminate a process.

We can sometimes get a FALSE result from WM_QUERYENDSESSION as a side-effect
of terminating a process. We should continue the shutdown process in this
case.

---

 programs/wineboot/shutdown.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/programs/wineboot/shutdown.c b/programs/wineboot/shutdown.c
index cebe16b..ac3019c 100644
--- a/programs/wineboot/shutdown.c
+++ b/programs/wineboot/shutdown.c
@@ -113,6 +113,7 @@ struct endtask_dlg_data
 {
     struct window_info *win;
     BOOL cancelled;
+    BOOL terminated;
 };
 
 static INT_PTR CALLBACK endtask_dlg_proc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam )
@@ -138,6 +139,7 @@ static INT_PTR CALLBACK endtask_dlg_proc( HWND hwnd, UINT msg, WPARAM wparam, LP
                 WINE_TRACE( "terminating process %04x\n", data->win[0].pid );
                 TerminateProcess( handle, 0 );
                 CloseHandle( handle );
+                data->terminated = TRUE;
             }
             return TRUE;
         case MAKEWPARAM(IDCANCEL, BN_CLICKED):
@@ -175,6 +177,7 @@ static LRESULT send_messages_with_timeout_dialog(
     cb_data->window_count = count;
 
     dlg_data.win = win;
+    dlg_data.terminated = FALSE;
     dlg_data.cancelled = FALSE;
 
     for (i = 0; i < count; i++)
@@ -211,7 +214,7 @@ static LRESULT send_messages_with_timeout_dialog(
             }
             if (!cb_data->window_count)
             {
-                result = cb_data->result;
+                result = dlg_data.terminated || cb_data->result;
                 HeapFree( GetProcessHeap(), 0, cb_data );
                 if (!result)
                     goto cleanup;




More information about the wine-cvs mailing list