From 7a97fe6793a65583b3ca9d654ccec950ac052993 Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Thu, 10 Dec 2009 12:35:18 -0600 Subject: [PATCH 2/3] wineboot: Terminate processes immediately after WM_ENDSESSION. Once a process returns from WM_ENDSESSION, we can assume it has finished doing any cleanup it needs but will most likely not shut down on its own. --- programs/wineboot/shutdown.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/programs/wineboot/shutdown.c b/programs/wineboot/shutdown.c index 49c03c2..ed80bf0 100644 --- a/programs/wineboot/shutdown.c +++ b/programs/wineboot/shutdown.c @@ -31,7 +31,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(wineboot); #define MESSAGE_TIMEOUT 5000 -#define PROCQUIT_TIMEOUT 20000 struct window_info { @@ -278,12 +277,13 @@ static DWORD_PTR send_end_session_messages( struct window_info *win, UINT count, return 1; } - /* wait for app to quit on its own for a while */ - ret = WaitForSingleObject( process_handle, PROCQUIT_TIMEOUT ); + /* Check whether the app quit on its own */ + ret = WaitForSingleObject( process_handle, 0 ); CloseHandle( process_handle ); if (ret == WAIT_TIMEOUT) { - /* it didn't quit by itself in time, so terminate it with extreme prejudice */ + /* If not, it returned from all WM_ENDSESSION and is finished cleaning + * up, so we can safely kill the process. */ HANDLE handle = OpenProcess( PROCESS_TERMINATE, FALSE, win[0].pid ); if (handle) { -- 1.6.3.3