diff --git a/fdbserver/FDBExecHelper.actor.cpp b/fdbserver/FDBExecHelper.actor.cpp index 9e521d5c98..6e139c743f 100644 --- a/fdbserver/FDBExecHelper.actor.cpp +++ b/fdbserver/FDBExecHelper.actor.cpp @@ -102,33 +102,27 @@ ACTOR Future spawnProcess(std::string binPath, std::vector par if (!isSync && !g_network->isSimulated()) { while (c.running() && runTime <= maxWaitTime) { - wait(delay(0.1)); - runTime += 0.1; - } - if (c.running()) { - c.terminate(); - err = -1; - } else { - err = c.exit_code(); + wait(delay(0.1)); + runTime += 0.1; } + } else { + int maxWaitTimeInt = static_cast(maxWaitTime + 1.0); + c.wait_for(std::chrono::seconds(maxWaitTimeInt)); + } + + if (c.running()) { + TraceEvent(SevWarnAlways, "ChildTermination") + .detail("Cmd", binPath) + .detail("Args", argsString); + c.terminate(); + err = -1; if (!c.wait_for(std::chrono::seconds(1))) { TraceEvent(SevWarnAlways, "SpawnProcessFailedToExit") .detail("Cmd", binPath) .detail("Args", argsString); } } else { - state std::error_code errCode; - bool succ = c.wait_for(std::chrono::seconds(3), errCode); - err = errCode.value(); - if (!succ) { - err = -1; - c.terminate(); - if (!c.wait_for(std::chrono::seconds(1))) { - TraceEvent(SevWarnAlways, "SpawnProcessFailedToExit") - .detail("Cmd", binPath) - .detail("Args", argsString); - } - } + err = c.exit_code(); } TraceEvent("SpawnProcess") .detail("Cmd", binPath)