aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/build/worker.cc
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-08-12 15:51:14 +0200
committereldritch horrors <pennae@lix.systems>2024-08-19 09:13:44 +0000
commitfb8eb539fca224803014d43c220abbd6e704a962 (patch)
tree51505397366f3c349c47032ebe4fbe73ac5e1939 /src/libstore/build/worker.cc
parent3d14567d0bc810426f2a6b391a47dc153863cf8b (diff)
libstore: move respect-timeoutiness to goal method
this is useless to do on the face of it, but it'll make it easier to convert the entire output handling to use async io and promises soon Change-Id: I2d1eb62c4bbf8f57bd558b9599c08710a389b1a8
Diffstat (limited to 'src/libstore/build/worker.cc')
-rw-r--r--src/libstore/build/worker.cc19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/libstore/build/worker.cc b/src/libstore/build/worker.cc
index 411525d94..325de3073 100644
--- a/src/libstore/build/worker.cc
+++ b/src/libstore/build/worker.cc
@@ -233,7 +233,7 @@ void Worker::wakeUp(GoalPtr goal)
void Worker::childStarted(GoalPtr goal, const std::set<int> & fds,
- bool inBuildSlot, bool respectTimeouts)
+ bool inBuildSlot)
{
Child child;
child.goal = goal;
@@ -241,7 +241,6 @@ void Worker::childStarted(GoalPtr goal, const std::set<int> & fds,
child.fds = fds;
child.timeStarted = child.lastOutput = steady_time_point::clock::now();
child.inBuildSlot = inBuildSlot;
- child.respectTimeouts = respectTimeouts;
children.emplace_back(child);
if (inBuildSlot) {
switch (goal->jobCategory()) {
@@ -427,11 +426,13 @@ void Worker::waitForInput()
// Periodicallty wake up to see if we need to run the garbage collector.
nearest = before + std::chrono::seconds(10);
for (auto & i : children) {
- if (!i.respectTimeouts) continue;
- if (0 != settings.maxSilentTime)
- nearest = std::min(nearest, i.lastOutput + std::chrono::seconds(settings.maxSilentTime));
- if (0 != settings.buildTimeout)
- nearest = std::min(nearest, i.timeStarted + std::chrono::seconds(settings.buildTimeout));
+ if (auto goal = i.goal.lock()) {
+ if (!goal->respectsTimeouts()) continue;
+ if (0 != settings.maxSilentTime)
+ nearest = std::min(nearest, i.lastOutput + std::chrono::seconds(settings.maxSilentTime));
+ if (0 != settings.buildTimeout)
+ nearest = std::min(nearest, i.timeStarted + std::chrono::seconds(settings.buildTimeout));
+ }
}
if (nearest != steady_time_point::max()) {
timeout = std::max(1L, (long) std::chrono::duration_cast<std::chrono::seconds>(nearest - before).count());
@@ -484,7 +485,7 @@ void Worker::waitForInput()
if (!goal->exitCode.has_value() &&
0 != settings.maxSilentTime &&
- j->respectTimeouts &&
+ goal->respectsTimeouts() &&
after - j->lastOutput >= std::chrono::seconds(settings.maxSilentTime))
{
handleWorkResult(
@@ -500,7 +501,7 @@ void Worker::waitForInput()
else if (!goal->exitCode.has_value() &&
0 != settings.buildTimeout &&
- j->respectTimeouts &&
+ goal->respectsTimeouts() &&
after - j->timeStarted >= std::chrono::seconds(settings.buildTimeout))
{
handleWorkResult(