From 3c7162e6d0b5dcee2c832ea5afd4e47c396a99d4 Mon Sep 17 00:00:00 2001 From: eldritch horrors Date: Wed, 5 Feb 2025 02:12:56 +0100 Subject: [PATCH] libstore: split PathLocks::lockPaths into lock, tryLock Change-Id: I202cfc077b7e468c74ecd8039175cef34855944c --- lix/libstore/build/derivation-goal.cc | 2 +- lix/libstore/pathlocks.cc | 2 +- lix/libstore/pathlocks.hh | 16 +++++++++++----- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lix/libstore/build/derivation-goal.cc b/lix/libstore/build/derivation-goal.cc index 9ac233010..12eac38cf 100644 --- a/lix/libstore/build/derivation-goal.cc +++ b/lix/libstore/build/derivation-goal.cc @@ -734,7 +734,7 @@ retry: } } - if (!outputLocks.lockPaths(lockFiles, "", false)) { + if (!outputLocks.tryLockPaths(lockFiles)) { if (!actLock) actLock = std::make_unique(*logger, lvlWarn, actBuildWaiting, fmt("waiting for lock on %s", Magenta(showPaths(lockFiles)))); diff --git a/lix/libstore/pathlocks.cc b/lix/libstore/pathlocks.cc index c5757cd8e..ba80ed51c 100644 --- a/lix/libstore/pathlocks.cc +++ b/lix/libstore/pathlocks.cc @@ -113,7 +113,7 @@ PathLocks::PathLocks(const PathSet & paths, const std::string & waitMsg) } -bool PathLocks::lockPaths(const PathSet & paths, +bool PathLocks::lockPathsImpl(const PathSet & paths, const std::string & waitMsg, bool wait) { assert(fds.empty()); diff --git a/lix/libstore/pathlocks.hh b/lix/libstore/pathlocks.hh index e8bff3401..2bfb5b5aa 100644 --- a/lix/libstore/pathlocks.hh +++ b/lix/libstore/pathlocks.hh @@ -39,13 +39,19 @@ private: std::list fds; bool deletePaths; + bool lockPathsImpl(const PathSet & _paths, const std::string & waitMsg, bool wait); + public: PathLocks(); - PathLocks(const PathSet & paths, - const std::string & waitMsg = ""); - bool lockPaths(const PathSet & _paths, - const std::string & waitMsg = "", - bool wait = true); + PathLocks(const PathSet & paths, const std::string & waitMsg = ""); + void lockPaths(const PathSet & _paths, const std::string & waitMsg = "") + { + lockPathsImpl(_paths, waitMsg, true); + } + bool tryLockPaths(const PathSet & _paths) + { + return lockPathsImpl(_paths, "", false); + } ~PathLocks(); void unlock(); void setDeletion(bool deletePaths);