summaryrefslogtreecommitdiff
path: root/util/ntservice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'util/ntservice.cpp')
-rw-r--r--util/ntservice.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/util/ntservice.cpp b/util/ntservice.cpp
index ccf2981..4b21b8c 100644
--- a/util/ntservice.cpp
+++ b/util/ntservice.cpp
@@ -312,9 +312,21 @@ namespace mongo {
SERVICE_STATUS ssStatus;
+ DWORD dwControlsAccepted;
+ switch ( reportState ) {
+ case SERVICE_START_PENDING:
+ case SERVICE_STOP_PENDING:
+ case SERVICE_STOPPED:
+ dwControlsAccepted = 0;
+ break;
+ default:
+ dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
+ break;
+ }
+
ssStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
ssStatus.dwServiceSpecificExitCode = 0;
- ssStatus.dwControlsAccepted = reportState == SERVICE_START_PENDING ? 0 : SERVICE_ACCEPT_STOP;
+ ssStatus.dwControlsAccepted = dwControlsAccepted;
ssStatus.dwCurrentState = reportState;
ssStatus.dwWin32ExitCode = NO_ERROR;
ssStatus.dwWaitHint = waitHint;
@@ -340,6 +352,7 @@ namespace mongo {
switch ( ctrlCode ) {
case SERVICE_CONTROL_STOP:
case SERVICE_CONTROL_SHUTDOWN:
+ reportStatus( SERVICE_STOP_PENDING );
shutdownServer();
reportStatus( SERVICE_STOPPED );
return;