in daemon/src/main/java/org/mvndaemon/mvnd/daemon/Server.java [460:504]
private void cancelNow() {
long time = System.currentTimeMillis() + CANCEL_TIMEOUT;
LOGGER.debug("Cancel requested: will wait for daemon to become idle.");
final SmartBuilder builder = SmartBuilder.cancel();
stateLock.lock();
try {
try {
ProcessHelper.killChildrenProcesses();
} catch (Throwable t) {
LOGGER.debug("Error killing children processes", t);
t.printStackTrace();
}
long rem;
while ((rem = time - System.currentTimeMillis()) > 0) {
try {
switch (getState()) {
case Idle:
LOGGER.debug("Cancel: daemon is idle now.");
return;
case Busy:
case Canceled:
case StopRequested:
LOGGER.debug("Cancel: daemon is busy, sleeping until state changes.");
condition.await(rem, TimeUnit.MILLISECONDS);
break;
case Broken:
throw new IllegalStateException("This daemon is in a broken state.");
case Stopped:
LOGGER.debug("Cancel: daemon has stopped.");
return;
}
} catch (InterruptedException e) {
throw new DaemonException.InterruptedException(e);
}
}
LOGGER.debug("Cancel: daemon is still busy after grace period. Will force stop.");
stopNow("cancel requested but timed out");
} finally {
stateLock.unlock();
if (builder != null) {
builder.doneCancel();
}
}
}