diff --git a/src/libstore/build/derivation-building-goal.cc b/src/libstore/build/derivation-building-goal.cc index 072bbfa93..4760c039b 100644 --- a/src/libstore/build/derivation-building-goal.cc +++ b/src/libstore/build/derivation-building-goal.cc @@ -716,11 +716,6 @@ Goal::Co DerivationBuildingGoal::tryToBuild() ~DerivationBuildingGoalCallbacks() override = default; - void childStarted(Descriptor builderOut) override - { - goal.worker.childStarted(goal.shared_from_this(), {builderOut}, true, true); - } - void childTerminated() override { goal.worker.childTerminated(&goal); @@ -802,10 +797,11 @@ Goal::Co DerivationBuildingGoal::tryToBuild() actLock.reset(); + Descriptor builderOut; try { /* Okay, we have to build. */ - builder->startBuilder(); + builderOut = builder->startBuilder(); } catch (BuildError & e) { builder.reset(); @@ -814,6 +810,8 @@ Goal::Co DerivationBuildingGoal::tryToBuild() co_return doneFailure(std::move(e)); // InputRejected } + worker.childStarted(shared_from_this(), {builderOut}, true, true); + started(); co_await Suspend{}; diff --git a/src/libstore/include/nix/store/build/derivation-builder.hh b/src/libstore/include/nix/store/build/derivation-builder.hh index deb4612b4..e8aefa377 100644 --- a/src/libstore/include/nix/store/build/derivation-builder.hh +++ b/src/libstore/include/nix/store/build/derivation-builder.hh @@ -114,13 +114,6 @@ struct DerivationBuilderCallbacks */ virtual void closeLogFile() = 0; - /** - * Hook up `builderOut` to some mechanism to ingest the log - * - * @todo this should be reworked - */ - virtual void childStarted(Descriptor builderOut) = 0; - /** * @todo this should be reworked */ @@ -161,8 +154,10 @@ struct DerivationBuilder : RestrictionContext /** * Start building a derivation. + * + * @return logging pipe */ - virtual void startBuilder() = 0; + virtual Descriptor startBuilder() = 0; /** * Tear down build environment after the builder exits (either on diff --git a/src/libstore/unix/build/derivation-builder.cc b/src/libstore/unix/build/derivation-builder.cc index de0b46295..577385093 100644 --- a/src/libstore/unix/build/derivation-builder.cc +++ b/src/libstore/unix/build/derivation-builder.cc @@ -216,7 +216,7 @@ public: bool prepareBuild() override; - void startBuilder() override; + Descriptor startBuilder() override; SingleDrvOutputs unprepareBuild() override; @@ -679,7 +679,7 @@ static bool checkNotWorldWritable(std::filesystem::path path) return true; } -void DerivationBuilderImpl::startBuilder() +Descriptor DerivationBuilderImpl::startBuilder() { /* Make sure that no other processes are executing under the sandbox uids. This must be done before any chownToBuilder() @@ -841,9 +841,10 @@ void DerivationBuilderImpl::startBuilder() startChild(); pid.setSeparatePG(true); - miscMethods->childStarted(builderOut.get()); processSandboxSetupMessages(); + + return builderOut.get(); } PathsInChroot DerivationBuilderImpl::getPathsInSandbox()