libstore: turn waitForInput into a promise

Change-Id: I8355d8d3f6c43a812990c1912b048e5735b07f7b
This commit is contained in:
eldritch horrors 2024-09-30 01:31:29 +02:00
parent 8e05cc1e6c
commit d31310bf59
2 changed files with 8 additions and 5 deletions

View file

@ -328,7 +328,7 @@ std::vector<GoalPtr> Worker::run(std::function<Targets (GoalFactory &)> req)
/* Wait for input. */
if (!children.isEmpty())
waitForInput();
waitForInput().wait(aio.waitScope).value();
else {
assert(!awake.empty());
}
@ -351,8 +351,8 @@ std::vector<GoalPtr> Worker::run(std::function<Targets (GoalFactory &)> req)
return results;
}
void Worker::waitForInput()
{
kj::Promise<Result<void>> Worker::waitForInput()
try {
printMsg(lvlVomit, "waiting for children");
auto waitFor = [&]{
@ -366,7 +366,10 @@ void Worker::waitForInput()
waitFor = waitFor.exclusiveJoin(aio.provider->getTimer().afterDelay(10 * kj::SECONDS));
}
waitFor.wait(aio.waitScope);
co_await waitFor;
co_return result::success();
} catch (...) {
co_return result::failure(std::current_exception());
}

View file

@ -156,7 +156,7 @@ private:
/**
* Wait for input to become available.
*/
void waitForInput();
kj::Promise<Result<void>> waitForInput();
/**
* Remove a dead goal.