libstore: have makeLocalDerivationGoal return unique_ptrs

these can be unique rather than shared because shared_ptr has a
converting constructor. preparatory refactor for something else
and not necessary on its own, and the extra allocations we must
do for shared_ptr control blocks isn't usually relevant anyway.

Change-Id: I5391715545240c6ec8e83a031206edafdfc6462f
This commit is contained in:
eldritch horrors 2024-09-25 23:57:46 +02:00
parent 289e7a6b5a
commit 3f7519526f
4 changed files with 18 additions and 18 deletions

View file

@ -182,7 +182,7 @@ struct LocalDerivationGoal : public DerivationGoal
* Create a LocalDerivationGoal without an on-disk .drv file, * Create a LocalDerivationGoal without an on-disk .drv file,
* possibly a platform-specific subclass * possibly a platform-specific subclass
*/ */
static std::shared_ptr<LocalDerivationGoal> makeLocalDerivationGoal( static std::unique_ptr<LocalDerivationGoal> makeLocalDerivationGoal(
const StorePath & drvPath, const StorePath & drvPath,
const OutputsSpec & wantedOutputs, const OutputsSpec & wantedOutputs,
Worker & worker, Worker & worker,
@ -194,7 +194,7 @@ struct LocalDerivationGoal : public DerivationGoal
* Create a LocalDerivationGoal for an on-disk .drv file, * Create a LocalDerivationGoal for an on-disk .drv file,
* possibly a platform-specific subclass * possibly a platform-specific subclass
*/ */
static std::shared_ptr<LocalDerivationGoal> makeLocalDerivationGoal( static std::unique_ptr<LocalDerivationGoal> makeLocalDerivationGoal(
const StorePath & drvPath, const StorePath & drvPath,
const BasicDerivation & drv, const BasicDerivation & drv,
const OutputsSpec & wantedOutputs, const OutputsSpec & wantedOutputs,

View file

@ -55,7 +55,7 @@ Worker::~Worker()
std::pair<std::shared_ptr<DerivationGoal>, kj::Promise<void>> Worker::makeDerivationGoalCommon( std::pair<std::shared_ptr<DerivationGoal>, kj::Promise<void>> Worker::makeDerivationGoalCommon(
const StorePath & drvPath, const StorePath & drvPath,
const OutputsSpec & wantedOutputs, const OutputsSpec & wantedOutputs,
std::function<std::shared_ptr<DerivationGoal>()> mkDrvGoal) std::function<std::unique_ptr<DerivationGoal>()> mkDrvGoal)
{ {
auto & goal_weak = derivationGoals[drvPath]; auto & goal_weak = derivationGoals[drvPath];
std::shared_ptr<DerivationGoal> goal = goal_weak.goal.lock(); std::shared_ptr<DerivationGoal> goal = goal_weak.goal.lock();
@ -78,9 +78,9 @@ std::pair<std::shared_ptr<DerivationGoal>, kj::Promise<void>> Worker::makeDeriva
return makeDerivationGoalCommon( return makeDerivationGoalCommon(
drvPath, drvPath,
wantedOutputs, wantedOutputs,
[&]() -> std::shared_ptr<DerivationGoal> { [&]() -> std::unique_ptr<DerivationGoal> {
return !dynamic_cast<LocalStore *>(&store) return !dynamic_cast<LocalStore *>(&store)
? std::make_shared<DerivationGoal>( ? std::make_unique<DerivationGoal>(
drvPath, wantedOutputs, *this, running, buildMode drvPath, wantedOutputs, *this, running, buildMode
) )
: LocalDerivationGoal::makeLocalDerivationGoal( : LocalDerivationGoal::makeLocalDerivationGoal(
@ -101,9 +101,9 @@ std::pair<std::shared_ptr<DerivationGoal>, kj::Promise<void>> Worker::makeBasicD
return makeDerivationGoalCommon( return makeDerivationGoalCommon(
drvPath, drvPath,
wantedOutputs, wantedOutputs,
[&]() -> std::shared_ptr<DerivationGoal> { [&]() -> std::unique_ptr<DerivationGoal> {
return !dynamic_cast<LocalStore *>(&store) return !dynamic_cast<LocalStore *>(&store)
? std::make_shared<DerivationGoal>( ? std::make_unique<DerivationGoal>(
drvPath, drv, wantedOutputs, *this, running, buildMode drvPath, drv, wantedOutputs, *this, running, buildMode
) )
: LocalDerivationGoal::makeLocalDerivationGoal( : LocalDerivationGoal::makeLocalDerivationGoal(

View file

@ -245,7 +245,7 @@ public:
private: private:
std::pair<std::shared_ptr<DerivationGoal>, kj::Promise<void>> makeDerivationGoalCommon( std::pair<std::shared_ptr<DerivationGoal>, kj::Promise<void>> makeDerivationGoalCommon(
const StorePath & drvPath, const OutputsSpec & wantedOutputs, const StorePath & drvPath, const OutputsSpec & wantedOutputs,
std::function<std::shared_ptr<DerivationGoal>()> mkDrvGoal); std::function<std::unique_ptr<DerivationGoal>()> mkDrvGoal);
std::pair<std::shared_ptr<DerivationGoal>, kj::Promise<void>> makeDerivationGoal( std::pair<std::shared_ptr<DerivationGoal>, kj::Promise<void>> makeDerivationGoal(
const StorePath & drvPath, const StorePath & drvPath,
const OutputsSpec & wantedOutputs, BuildMode buildMode = bmNormal) override; const OutputsSpec & wantedOutputs, BuildMode buildMode = bmNormal) override;

View file

@ -25,7 +25,7 @@ std::shared_ptr<LocalStore> LocalStore::makeLocalStore(const Params & params)
#endif #endif
} }
std::shared_ptr<LocalDerivationGoal> LocalDerivationGoal::makeLocalDerivationGoal( std::unique_ptr<LocalDerivationGoal> LocalDerivationGoal::makeLocalDerivationGoal(
const StorePath & drvPath, const StorePath & drvPath,
const OutputsSpec & wantedOutputs, const OutputsSpec & wantedOutputs,
Worker & worker, Worker & worker,
@ -34,17 +34,17 @@ std::shared_ptr<LocalDerivationGoal> LocalDerivationGoal::makeLocalDerivationGoa
) )
{ {
#if __linux__ #if __linux__
return std::make_shared<LinuxLocalDerivationGoal>(drvPath, wantedOutputs, worker, isDependency, buildMode); return std::make_unique<LinuxLocalDerivationGoal>(drvPath, wantedOutputs, worker, isDependency, buildMode);
#elif __APPLE__ #elif __APPLE__
return std::make_shared<DarwinLocalDerivationGoal>(drvPath, wantedOutputs, worker, isDependency, buildMode); return std::make_unique<DarwinLocalDerivationGoal>(drvPath, wantedOutputs, worker, isDependency, buildMode);
#elif __FreeBSD__ #elif __FreeBSD__
return std::make_shared<FreeBSDLocalDerivationGoal>(drvPath, wantedOutputs, worker, isDependency, buildMode); return std::make_unique<FreeBSDLocalDerivationGoal>(drvPath, wantedOutputs, worker, isDependency, buildMode);
#else #else
return std::make_shared<FallbackLocalDerivationGoal>(drvPath, wantedOutputs, worker, isDependency, buildMode); return std::make_unique<FallbackLocalDerivationGoal>(drvPath, wantedOutputs, worker, isDependency, buildMode);
#endif #endif
} }
std::shared_ptr<LocalDerivationGoal> LocalDerivationGoal::makeLocalDerivationGoal( std::unique_ptr<LocalDerivationGoal> LocalDerivationGoal::makeLocalDerivationGoal(
const StorePath & drvPath, const StorePath & drvPath,
const BasicDerivation & drv, const BasicDerivation & drv,
const OutputsSpec & wantedOutputs, const OutputsSpec & wantedOutputs,
@ -54,19 +54,19 @@ std::shared_ptr<LocalDerivationGoal> LocalDerivationGoal::makeLocalDerivationGoa
) )
{ {
#if __linux__ #if __linux__
return std::make_shared<LinuxLocalDerivationGoal>( return std::make_unique<LinuxLocalDerivationGoal>(
drvPath, drv, wantedOutputs, worker, isDependency, buildMode drvPath, drv, wantedOutputs, worker, isDependency, buildMode
); );
#elif __APPLE__ #elif __APPLE__
return std::make_shared<DarwinLocalDerivationGoal>( return std::make_unique<DarwinLocalDerivationGoal>(
drvPath, drv, wantedOutputs, worker, isDependency, buildMode drvPath, drv, wantedOutputs, worker, isDependency, buildMode
); );
#elif __FreeBSD__ #elif __FreeBSD__
return std::make_shared<FreeBSDLocalDerivationGoal>( return std::make_unique<FreeBSDLocalDerivationGoal>(
drvPath, drv, wantedOutputs, worker, isDependency, buildMode drvPath, drv, wantedOutputs, worker, isDependency, buildMode
); );
#else #else
return std::make_shared<FallbackLocalDerivationGoal>( return std::make_unique<FallbackLocalDerivationGoal>(
drvPath, drv, wantedOutputs, worker, isDependency, buildMode drvPath, drv, wantedOutputs, worker, isDependency, buildMode
); );
#endif #endif