diff --git a/src/libstore/build/derivation-goal.cc b/src/libstore/build/derivation-goal.cc index 3dca7a3c0..a75a674d1 100644 --- a/src/libstore/build/derivation-goal.cc +++ b/src/libstore/build/derivation-goal.cc @@ -1544,6 +1544,10 @@ Goal::Finished DerivationGoal::done( fs << worker.store.printStorePath(drvPath) << "\t" << buildResult.toString() << std::endl; } + if (ex && isDependency) { + logError(ex->info()); + } + return Finished{ .result = buildResult.success() ? ecSuccess : ecFailed, .ex = ex ? std::make_shared(std::move(*ex)) : nullptr, diff --git a/src/libstore/build/worker.cc b/src/libstore/build/worker.cc index 5d0cc920a..7336ad50f 100644 --- a/src/libstore/build/worker.cc +++ b/src/libstore/build/worker.cc @@ -157,19 +157,13 @@ void Worker::goalFinished(GoalPtr goal, Goal::Finished & f) goal->trace("done"); assert(!goal->exitCode.has_value()); goal->exitCode = f.result; + goal->ex = f.ex; permanentFailure |= f.permanentFailure; timedOut |= f.timedOut; hashMismatch |= f.hashMismatch; checkMismatch |= f.checkMismatch; - if (f.ex) { - if (!goal->waiters.empty()) - logError(f.ex->info()); - else - goal->ex = f.ex; - } - for (auto & i : goal->waiters) { if (GoalPtr waiting = i.lock()) { assert(waiting->waitees.count(goal));