[2/3] wineboot: Terminate processes immediately after WM_ENDSESSION.
madewokherd+8cd9 at gmail.com
Thu Dec 10 13:42:39 CST 2009
On Thu, Dec 10, 2009 at 1:20 PM, Juan Lang <juan.lang at gmail.com> 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.
>  http://blogs.msdn.com/michen/archive/2008/04/04/Application-termination-when-user-logs-off.aspx
>  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  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.
More information about the wine-devel