From: Jeffrey Altman Date: Mon, 13 Aug 2007 03:53:30 +0000 (+0000) Subject: DEVEL15-windows-service-manager-20070812 X-Git-Tag: openafs-devel-1_5_23~34 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=3213b34972b63fce04dd1e050be1b93b4e1b88c7;p=packages%2Fo%2Fopenafs.git DEVEL15-windows-service-manager-20070812 provide the windows service manager with shutdown hints in addition to startup hints (cherry picked from commit 35f91f1203717f8ab9f00f0914025fc6606e102d) --- diff --git a/src/WINNT/afsd/afsd_service.c b/src/WINNT/afsd/afsd_service.c index 6e9f9bc08..d850037eb 100644 --- a/src/WINNT/afsd/afsd_service.c +++ b/src/WINNT/afsd/afsd_service.c @@ -1352,7 +1352,7 @@ afsd_Main(DWORD argc, LPTSTR *argv) #ifndef NOTSERVICE ServiceStatus.dwCurrentState = SERVICE_RUNNING; ServiceStatus.dwWin32ExitCode = NO_ERROR; - ServiceStatus.dwCheckPoint = 0; + ServiceStatus.dwCheckPoint = 5; ServiceStatus.dwWaitHint = 0; /* accept Power events */ @@ -1401,6 +1401,13 @@ afsd_Main(DWORD argc, LPTSTR *argv) CloseHandle(hAFSDWorkerThread[cnt]); #endif + ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING; + ServiceStatus.dwWin32ExitCode = NO_ERROR; + ServiceStatus.dwCheckPoint = 6; + ServiceStatus.dwWaitHint = 120000; + ServiceStatus.dwControlsAccepted = 0; + SetServiceStatus(StatusHandle, &ServiceStatus); + afsi_log("Received Termination Signal, Stopping Service"); if ( GlobalStatus ) @@ -1420,19 +1427,6 @@ afsd_Main(DWORD argc, LPTSTR *argv) } FreeLibrary(hHookDll); hHookDll = NULL; - - if (hookRc == FALSE) - { - ServiceStatus.dwCurrentState = SERVICE_STOPPED; - ServiceStatus.dwWin32ExitCode = NO_ERROR; - ServiceStatus.dwCheckPoint = 0; - ServiceStatus.dwWaitHint = 0; - ServiceStatus.dwControlsAccepted = 0; - SetServiceStatus(StatusHandle, &ServiceStatus); - - /* exit if initialization failed */ - return; - } } @@ -1500,7 +1494,7 @@ afsd_Main(DWORD argc, LPTSTR *argv) ServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwWin32ExitCode = GlobalStatus ? ERROR_EXCEPTION_IN_SERVICE : NO_ERROR; - ServiceStatus.dwCheckPoint = 0; + ServiceStatus.dwCheckPoint = 7; ServiceStatus.dwWaitHint = 0; ServiceStatus.dwControlsAccepted = 0; SetServiceStatus(StatusHandle, &ServiceStatus);