diff --git a/subprojects/nix-eval-jobs/src/nix-eval-jobs.cc b/subprojects/nix-eval-jobs/src/nix-eval-jobs.cc index f030c7515..d7a2f1448 100644 --- a/subprojects/nix-eval-jobs/src/nix-eval-jobs.cc +++ b/subprojects/nix-eval-jobs/src/nix-eval-jobs.cc @@ -44,9 +44,8 @@ using namespace nix; -using Processor = std::function state, Bindings &autoArgs, - AutoCloseFD &to, AutoCloseFD &from, MyArgs &args, AsyncIoRoot &aio)>; +using Processor = + std::function; /* Auto-cleanup of fork's process and fds. */ struct Proc { @@ -63,30 +62,7 @@ struct Proc { from{ std::make_shared(std::move(toPipe.readSide))}]() { debug("created worker process %d", getpid()); - try { - AsyncIoRoot aio; - auto evalStore = aio.blockOn(myArgs.evalStoreUrl - ? openStore(*myArgs.evalStoreUrl) - : openStore()); - auto evaluator = - nix::make_ref( - aio, myArgs.searchPath, evalStore); - Bindings &autoArgs = *myArgs.getAutoArgs(*evaluator); - proc(evaluator, autoArgs, *to, *from, myArgs, aio); - } catch (Error &e) { - JSON err; - auto msg = e.msg(); - err["error"] = nix::filterANSIEscapes(msg, true); - printError("%1%", Uncolored(msg)); - if (tryWriteLine(to->get(), err.dump()) < 0) { - return; // main process died - }; - // Don't forget to print it into the STDERR log, this is - // what's shown in the Hydra UI. - if (tryWriteLine(to->get(), "restart") < 0) { - return; // main process died - } - } + proc(*to, *from, myArgs); }, ProcessOptions{}); diff --git a/subprojects/nix-eval-jobs/src/worker.cc b/subprojects/nix-eval-jobs/src/worker.cc index 07588ae05..b644a0bbe 100644 --- a/subprojects/nix-eval-jobs/src/worker.cc +++ b/subprojects/nix-eval-jobs/src/worker.cc @@ -122,9 +122,17 @@ readConstituents(const nix::Value *v, nix::box_ptr &state, return std::nullopt; } -void worker(nix::ref evaluator, - nix::Bindings &autoArgs, nix::AutoCloseFD &to, - nix::AutoCloseFD &from, MyArgs &args, nix::AsyncIoRoot &aio) { +void worker(nix::AutoCloseFD &to, nix::AutoCloseFD &from, MyArgs &args) +try { + nix::AsyncIoRoot aio; + + auto evalStore = aio.blockOn(args.evalStoreUrl + ? nix::openStore(*args.evalStoreUrl) + : nix::openStore()); + auto evaluator = + nix::make_ref( + aio, args.searchPath, evalStore); + nix::Bindings &autoArgs = *args.getAutoArgs(*evaluator); nix::Value vRoot = [&]() { auto state = evaluator->begin(aio); @@ -253,4 +261,17 @@ void worker(nix::ref evaluator, if (tryWriteLine(to.get(), "restart") < 0) { return; // main process died }; +} catch (nix::Error &e) { + nix::JSON err; + auto msg = e.msg(); + err["error"] = nix::filterANSIEscapes(msg, true); + printError("%1%", nix::Uncolored(msg)); + if (tryWriteLine(to.get(), err.dump()) < 0) { + return; // main process died + }; + // Don't forget to print it into the STDERR log, this is + // what's shown in the Hydra UI. + if (tryWriteLine(to.get(), "restart") < 0) { + return; // main process died + } } diff --git a/subprojects/nix-eval-jobs/src/worker.hh b/subprojects/nix-eval-jobs/src/worker.hh index d4c41caff..21e8768c9 100644 --- a/subprojects/nix-eval-jobs/src/worker.hh +++ b/subprojects/nix-eval-jobs/src/worker.hh @@ -15,6 +15,4 @@ class EvalState; template class ref; } // namespace nix -void worker(nix::ref evaluator, - nix::Bindings &autoArgs, nix::AutoCloseFD &to, - nix::AutoCloseFD &from, MyArgs &args, nix::AsyncIoRoot &aio); +void worker(nix::AutoCloseFD &to, nix::AutoCloseFD &from, MyArgs &args);