forked from lix-project/lix
128910ba23
The new experimental feature 'cgroups' enables the use of cgroups for all builds. This allows better containment and enables setting resource limits and getting some build stats.
39 lines
718 B
C++
39 lines
718 B
C++
#pragma once
|
|
|
|
#include "types.hh"
|
|
|
|
#include <optional>
|
|
|
|
#include <sys/types.h>
|
|
|
|
namespace nix {
|
|
|
|
struct UserLock
|
|
{
|
|
virtual ~UserLock() { }
|
|
|
|
/* Get the first and last UID. */
|
|
std::pair<uid_t, uid_t> getUIDRange()
|
|
{
|
|
auto first = getUID();
|
|
return {first, first + getUIDCount() - 1};
|
|
}
|
|
|
|
/* Get the first UID. */
|
|
virtual uid_t getUID() = 0;
|
|
|
|
virtual uid_t getUIDCount() = 0;
|
|
|
|
virtual gid_t getGID() = 0;
|
|
|
|
virtual std::vector<gid_t> getSupplementaryGIDs() = 0;
|
|
};
|
|
|
|
/* Acquire a user lock for a UID range of size `nrIds`. Note that this
|
|
may return nullptr if no user is available. */
|
|
std::unique_ptr<UserLock> acquireUserLock(uid_t nrIds);
|
|
|
|
bool useBuildUsers();
|
|
|
|
}
|