Spawn a separate thread for stop_service().
authorIain Patterson <me@iain.cx>
Fri, 15 Nov 2013 15:44:46 +0000 (15:44 +0000)
committerIain Patterson <me@iain.cx>
Fri, 15 Nov 2013 16:10:40 +0000 (16:10 +0000)
commita3ad2151ad143eb587958e61a93d2de405d490df
tree5cebfd311a160fab2bfbca70ba20c2f664b22047
parent99c5c2868f1d351d4d0569fda9199dda1aadad07
Spawn a separate thread for stop_service().

We must acknowledge a STOP or SHUTDOWN control promptly but the
termination of the application may take a significant amount of time if
one of the AppStopMethod* registry values is set.

We now spawn a separate thread to try to stop the process and to call
await_shutdown() while the main thread immediately acknowledges receipt
of the STOP request.  Once the worker thread has updated the service
status to say that application is really stopped we will be
automatically cleaned up by the system.

If for some reason we can't spawn a new thread we log an error and
ignore user-supplied timeouts so as to ensure we tidy up promptly.
messages.mc
service.cpp