libstore: use std::async instead of Goal threads

the goals are either already using std::async and merely forgot to
remove std::thread vestiges or they emulate async with threads and
promises. we can simply use async directly everywhere for clarity.

Change-Id: I3f05098310a25984f10fff1e68c573329002b500
This commit is contained in:
eldritch horrors 2024-07-20 21:05:19 +02:00
parent ad36fb43ad
commit 58a91d70c9
3 changed files with 7 additions and 22 deletions

View file

@ -4,7 +4,6 @@
#include "store-api.hh"
#include "goal.hh"
#include "realisation.hh"
#include <thread>
#include <future>
namespace nix {
@ -41,11 +40,6 @@ class DrvOutputSubstitutionGoal : public Goal {
*/
std::shared_ptr<Store> sub;
/**
* The substituter thread.
*/
std::thread thr;
std::unique_ptr<MaintainCount<uint64_t>> maintainRunningSubstitutions;
struct DownloadState

View file

@ -214,9 +214,7 @@ void PathSubstitutionGoal::tryToRun()
outPipe.create();
promise = std::promise<void>();
thr = std::thread([this]() {
thr = std::async(std::launch::async, [this]() {
auto & fetchPath = subPath ? *subPath : storePath;
try {
ReceiveInterrupts receiveInterrupts;
@ -230,16 +228,12 @@ void PathSubstitutionGoal::tryToRun()
copyStorePath(
*sub, worker.store, fetchPath, repair, sub->isTrusted ? NoCheckSigs : CheckSigs
);
promise.set_value();
} catch (const EndOfFile &) {
promise.set_exception(std::make_exception_ptr(EndOfFile(
throw EndOfFile(
"NAR for '%s' fetched from '%s' is incomplete",
sub->printStorePath(fetchPath),
sub->getUri()
)));
} catch (...) {
promise.set_exception(std::current_exception());
);
}
});
@ -253,11 +247,10 @@ void PathSubstitutionGoal::finished()
{
trace("substitute finished");
thr.join();
worker.childTerminated(this);
try {
promise.get_future().get();
thr.get();
} catch (std::exception & e) {
printError(e.what());
@ -316,9 +309,9 @@ void PathSubstitutionGoal::handleEOF(int fd)
void PathSubstitutionGoal::cleanup()
{
try {
if (thr.joinable()) {
if (thr.valid()) {
// FIXME: signal worker thread to quit.
thr.join();
thr.get();
worker.childTerminated(this);
}

View file

@ -50,9 +50,7 @@ struct PathSubstitutionGoal : public Goal
/**
* The substituter thread.
*/
std::thread thr;
std::promise<void> promise;
std::future<void> thr;
/**
* Whether to try to repair a valid path.