On Thu, Dec 10, 2009 at 1:20 PM, Juan Lang <[email protected]> wrote: > Hi Vincent, > > - /* 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) > > I'm confused why you removed the timeout. The documented behavior[1, > 2] is to wait a short timeout, show a dialog if the app hasn't quit by > then, then kill it. This change makes wineboot terminate a process > immediately. Is this really necessary to fix the bug? I'd expect > that you want to handle the WAIT_OBJECT_0 case in addition to the > WAIT_TIMEOUT case, and leave the timeout alone. > --Juan > > [1] > http://blogs.msdn.com/michen/archive/2008/04/04/Application-termination-when-user-logs-off.aspx > [2] http://blogs.msdn.com/oldnewthing/archive/2008/04/21/8413175.aspx
Yes, this is really necessary, and it's how Windows does it. I've tested it, and it's documented, by the posts you've linked in fact. The timeout mentioned in [1] is in waiting for WM_ENDSESSION to return. This wait and timeout is handled by send_messages_with_timeout_dialog. However, once that message has returned, the process has done all the cleanup it needs and should be terminated. Since Windows terminates processes immediately after WM_ENDSESSION returns, there's no reason to believe the app will ever close itself and no reason to wait before killing it. -- Vincent Povirk
