From: <col...@at...> - 2005-05-30 09:00:26
|
Hi, During system shutdown SCM sends SERVICE_CONTROL_SHUTDOWN to running services (http://support.microsoft.com/kb/203878). But co_winnt_service_control_callback() handles SERVICE_CONTROL_STOP only, so it seems one has to do a "net stop" before host system shutdown to avoid unorderly coLinux shutdown since co_winnt_daemon_stop() won't be invoked otherwise. Alper -- OpenPGP keys: http://atici.name/keys.txt 0xB824F550 |
From: Henry N. <Henry.Ne@Arcor.de> - 2005-05-30 10:57:36
|
col...@at... wrote: > During system shutdown SCM sends SERVICE_CONTROL_SHUTDOWN to running > services (http://support.microsoft.com/kb/203878). > But co_winnt_service_control_callback() handles SERVICE_CONTROL_STOP only, > so it seems one has to do a "net stop" before host system shutdown to avoid > unorderly coLinux shutdown since co_winnt_daemon_stop() won't be invoked > otherwise. Thanks for the hint. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/handler.asp Read the /Remarks/: SCM give ~20 Seconds for shutting down services. So it will be better handle as STOP only service. Will add this to service handle, than Matthias can check this. This should solution for problem on shutdown (colinux-users ML) http://sourceforge.net/mailarchive/forum.php?thread_id=7384525&forum_id=40587 -- Henry Nestler |
From: <col...@at...> - 2005-05-30 11:58:11
|
On Mon, May 30, 2005 at 12:56:17PM +0200, Henry Nestler wrote: > col...@at... wrote: > > >During system shutdown SCM sends SERVICE_CONTROL_SHUTDOWN to running > >services (http://support.microsoft.com/kb/203878). > >But co_winnt_service_control_callback() handles SERVICE_CONTROL_STOP only, > >so it seems one has to do a "net stop" before host system shutdown to > >avoid unorderly coLinux shutdown since co_winnt_daemon_stop() won't be > >invoked otherwise. > > Thanks for the hint. > > http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/handler.asp > Read the /Remarks/: SCM give ~20 Seconds for shutting down services. So > it will be better handle as STOP only service. > I think the wording bw KB article and Platform SDK is inconsistent, and the latter IMO is misleading. Does Windows send a STOP to running services when the system is going down, or does it just send SHUTDOWN? Alper -- OpenPGP keys: http://atici.name/keys.txt 0xB824F550 |
From: Henry N. <Henry.Ne@Arcor.de> - 2005-05-30 12:33:27
|
col...@at... wrote: > On Mon, May 30, 2005 at 12:56:17PM +0200, Henry Nestler wrote: > >>col...@at... wrote: >> >> >>>During system shutdown SCM sends SERVICE_CONTROL_SHUTDOWN to running >>>services (http://support.microsoft.com/kb/203878). >>>But co_winnt_service_control_callback() handles SERVICE_CONTROL_STOP only, >>>so it seems one has to do a "net stop" before host system shutdown to >>>avoid unorderly coLinux shutdown since co_winnt_daemon_stop() won't be >>>invoked otherwise. >> >>Thanks for the hint. >> >>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/handler.asp >>Read the /Remarks/: SCM give ~20 Seconds for shutting down services. So >>it will be better handle as STOP only service. >> > > > > I think the wording bw KB article and Platform SDK is inconsistent, and the > latter IMO is misleading. > Does Windows send a STOP to running services when the system is going down, > or does it just send SHUTDOWN? Sends first a SHUTDOWN to all services. Later sends STOP, and waits ~20 seconds. SHUTDOWN must be register before (SetServiceStatus). STOP a service by user and SHUTDOWN by system are different. STOP from user waits 20 second to stop service. A STOP after SHUTDOWN don't wait 20 seconds, because STOP from system should stop an incomplete shotdown. But you can only set timeout for SHUTDOWN, not for STOP. http://support.microsoft.com/kb/146092/en-us So, I'm understand the SDK. I found this here with "Search for: SERVICE_CONTROL_SHUTDOWN" on msdn http://msdn.microsoft.com/library/en-us/dllproc/base/service_control_handler_function.asp "When the user shuts down the system, all control handlers that have called SetServiceStatus with the SERVICE_ACCEPT_SHUTDOWN control code receive the SERVICE_CONTROL_SHUTDOWN control code. They are notified in the order that they appear in the database of installed services. By default, a service has approximately 20 seconds to perform cleanup tasks before the system shuts down. ..." -- Henry Nestler |
From: <col...@at...> - 2005-05-30 13:02:21
|
On Mon, May 30, 2005 at 02:32:07PM +0200, Henry Nestler wrote: > > > >I think the wording bw KB article and Platform SDK is inconsistent, and > >the latter IMO is misleading. > >Does Windows send a STOP to running services when the system is going > >down, or does it just send SHUTDOWN? > > Sends first a SHUTDOWN to all services. Later sends STOP, and waits ~20 Well, how do you know that? Besides, what's point of sending STOP after SHUTDOWN? > SHUTDOWN must be register before (SetServiceStatus). OK. > STOP a service by user and SHUTDOWN by system are different. OK. > STOP from user waits 20 second to stop service. Not OK. How do you get this value? Remember, the registry setting applies only to SHUTDOWN. IMO, the only place you can comment about STOP timeout is Remarks section of ControlService() function, which says it'll wait for 30 seconds before returning ERROR_SERVICE_REQUEST_TIMEOUT > A STOP after SHUTDOWN don't wait > 20 seconds, because STOP from system should stop an incomplete shotdown. > But you can only set timeout for SHUTDOWN, not for STOP. > http://support.microsoft.com/kb/146092/en-us > So, I'm understand the SDK. > This article, and the one I posted previously say nothing about STOP control timeout, or sending STOP after SHUTDOWN. Alper -- OpenPGP keys: http://atici.name/keys.txt 0xB824F550 |
From: Henry N. <Henry.Ne@Arcor.de> - 2005-05-30 15:08:20
|
col...@at... wrote: > On Mon, May 30, 2005 at 02:32:07PM +0200, Henry Nestler wrote: > > >>>I think the wording bw KB article and Platform SDK is inconsistent, and >>>the latter IMO is misleading. >>>Does Windows send a STOP to running services when the system is going >>>down, or does it just send SHUTDOWN? >> >>Sends first a SHUTDOWN to all services. Later sends STOP, and waits ~20 > > Well, how do you know that? > Besides, what's point of sending STOP after SHUTDOWN? > I cannot state that with System-Shutdown a STOP is really sent. > >>STOP from user waits 20 second to stop service. > > > Not OK. How do you get this value? Remember, the registry setting applies > only to SHUTDOWN. > IMO, the only place you can comment about STOP timeout is Remarks section of > ControlService() function, which says it'll wait for 30 seconds before > returning ERROR_SERVICE_REQUEST_TIMEOUT OK. :-) > >>A STOP after SHUTDOWN don't wait >>20 seconds, because STOP from system should stop an incomplete shotdown. >>But you can only set timeout for SHUTDOWN, not for STOP. >>http://support.microsoft.com/kb/146092/en-us >>So, I'm understand the SDK. >> > > > This article, and the one I posted previously say nothing about STOP > control timeout, or sending STOP after SHUTDOWN. OK, mistaken. You can only set timout for SHUTDOWN (default ~20 sec). One article sayed, that SHUTDOWN is send to all services, that registered without dependences. Other article sayed, that STOP is sending in dependences of other services. All call back functions must returned in ~30 seconds. This is the fix timeout for STOP. Best article about STOP and SHUTDOWN: http://msdn.microsoft.com/library/en-us/dllproc/base/service_control_handler_function.asp Other case: http://msdn.microsoft.com/library/en-us/dllproc/base/stopping_a_service.asp // If a stop is pending, just wait for it while ( ss.dwCurrentState == SERVICE_STOP_PENDING ) { Sleep( ss.dwWaitHint ); ... See this source, SERVICE_STOP_PENDING should be give information how log service need to stop? But can not find, that colinux set such time. Or is this the WaitToKillServiceTimeout in registry? Sorry, if some mistaken. I can only read SDK, and it is not easy to understand. -- Henry Nestler |
From: Henry N. <Henry.Ne@Arcor.de> - 2005-05-31 09:05:11
|
Hello, can only say again: SDK is not the same as real WinXP. :-( WinXP-Home ignore the "WaitToKillServiceTimeout". W2K use it. But only if, service supports SERVICE_CONTROL_SHUTDOWN. http://www.henrynestler.com/colinux/binary/stable-0.6.3-20050530hn1/ What does other OS, such WinXP-Pro here? I have not such. Please test this and give us your report. --- README.TXT: Version 0.6.3-20050530hn1 Based on Monotone Date: 2005-05-25T00:26:36 (snapshot 20050524) Special features: - Added SERVICE_CONTROL_SHUTDOWN Under W2K can set WaitToKillServiceTimeout as timout, default is 20 sec. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control] "WaitToKillServiceTimeout"="20000" WinXP don't use this registry? WinXP always kill the daemon after 20 sec. - Start and Stop will be logged into application eventlog. - Special file colinux-daemon-60sec.exe If daemon received SERVICE_CONTROL_SHUTDOWN set dwWaitHint to 60 seconds for SERVICE_STOP_PENDING. This is a hard coded value in daemon. If this ok to work, we can put this into Registry or in command line args for daemon. On WinXP shutdown waits now longer as 20 Second. I'm feel, that SCM waits exact 60 seconts. But I'm not shure. A special linux image with a "sleep 30" in shutdown scripts sayed me, that shotdown was complete with this prepared daemon on WinXP. - Sources: Snapshot 20050524 + patch http://www.henrynestler.com/colinux/source/coLinux-0.6.3-20050524.src.tar.gz http://www.henrynestler.com/colinux/patches/stable/service-shutdown.patch http://www.henrynestler.com/colinux/patches/stable/service-60sec-hack.c Using: - Use a running coLinux and extract modules into /lib/modules. - Note, this compilation does not include an windows installer. Remember to reload the linux driver with these commands: >> colinux-daemon.exe --remove-driver >> colinux-daemon.exe --install-driver -- Henry Nestler |