| | |
| | | if (spawn(command, FALSE) != -1) |
| | | { |
| | | // Try to see if server is really stopped |
| | | int nTries = 10; |
| | | int nTries = 30; |
| | | BOOL running = TRUE; |
| | | |
| | | debug("doStopApplication: the spawn of the process worked."); |
| | |
| | | } |
| | | else |
| | | { |
| | | // Server appears not running - retry a few times before concluding |
| | | // it has actually stopped (the lock file check can be transient, |
| | | // e.g. during JVM GC pressure or heavy I/O after a large ldapsearch). |
| | | // 3 retries × 2 seconds gives up to 6 extra seconds of tolerance. |
| | | int retryCount = 3; |
| | | BOOL confirmedStopped = TRUE; |
| | | while (retryCount > 0) |
| | | { |
| | | retryCount--; |
| | | Sleep(2000); // wait 2 seconds between retries before re-checking |
| | | code = isServerRunning(&running, TRUE); |
| | | if (code == SERVICE_RETURN_OK && running) |
| | | { |
| | | confirmedStopped = FALSE; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (confirmedStopped) |
| | | { |
| | | // Check current Status |
| | | DWORD state; |
| | | BOOL success = getServiceStatus(serviceName, &state); |
| | |
| | | } |
| | | break; |
| | | } |
| | | // else: server is actually still running, continue monitoring |
| | | } |
| | | } |
| | | } |
| | | } |