1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-02 13:31:48 +02:00

Clean up cgroup handling in getMaxCPU()

Also, don't assume in LocalDerivationGoal that cgroups are mounted on
/sys/fs/cgroup.
This commit is contained in:
Eelco Dolstra 2022-12-02 12:57:41 +01:00
parent 1211e59a03
commit 1e6a5d1ff6
4 changed files with 39 additions and 35 deletions

View file

@ -2,6 +2,7 @@
#include "cgroup.hh"
#include "util.hh"
#include "finally.hh"
#include <chrono>
#include <cmath>
@ -10,9 +11,25 @@
#include <thread>
#include <dirent.h>
#include <mntent.h>
namespace nix {
std::optional<Path> getCgroupFS()
{
static auto res = [&]() -> std::optional<Path> {
auto fp = fopen("/proc/mounts", "r");
if (!fp) return std::nullopt;
Finally delFP = [&]() { fclose(fp); };
while (auto ent = getmntent(fp))
if (std::string_view(ent->mnt_type) == "cgroup2")
return ent->mnt_dir;
return std::nullopt;
}();
return res;
}
// FIXME: obsolete, check for cgroup2
std::map<std::string, std::string> getCgroups(const Path & cgroupFile)
{