summaryrefslogtreecommitdiff
path: root/vendor/github.com/KimMachineGun
diff options
context:
space:
mode:
authorLibravatar kim <grufwub@gmail.com>2025-11-03 13:55:04 +0100
committerLibravatar tobi <tobi.smethurst@protonmail.com>2025-11-17 14:12:09 +0100
commit81e3cdda44a2aed1ad0805fa738429c891b6209d (patch)
treed9c3c95eb721e1dc1c613ee7370eaad9ec8796f7 /vendor/github.com/KimMachineGun
parent[chore] add a 'nos3' build tag to support compiling without S3 storage suppor... (diff)
downloadgotosocial-81e3cdda44a2aed1ad0805fa738429c891b6209d.tar.xz
[chore] update dependencies (#4539)
- github.com/KimMachineGun/automemlimit: v0.7.4 -> v0.7.5 - github.com/tdewolff/minify/v2: v2.24.4 -> v2.24.5 - modernc.org/sqlite: v1.39.1 -> v1.40.0 w/ concurrency workaround - github.com/go-swagger/go-swagger: v0.32.3 -> v0.33.1 (and drops use of our custom fork now the fix is available upstream) Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4539 Co-authored-by: kim <grufwub@gmail.com> Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/github.com/KimMachineGun')
-rw-r--r--vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go37
1 files changed, 35 insertions, 2 deletions
diff --git a/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go b/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go
index 81559e3bf..2f0a84043 100644
--- a/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go
+++ b/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go
@@ -103,8 +103,8 @@ func getMemoryLimitV2(chs []cgroupHierarchy, mis []mountInfo) (uint64, error) {
return 0, err
}
- // retrieve the memory limit from the memory.max file
- return readMemoryLimitV2FromPath(filepath.Join(cgroupPath, "memory.max"))
+ // retrieve the memory limit from the memory.max recursively.
+ return walkCgroupV2Hierarchy(cgroupPath, mountPoint)
}
// readMemoryLimitV2FromPath reads the memory limit for cgroup v2 from the given path.
@@ -131,6 +131,39 @@ func readMemoryLimitV2FromPath(path string) (uint64, error) {
return limit, nil
}
+// walkCgroupV2Hierarchy walks up the cgroup v2 hierarchy to find the most restrictive memory limit.
+func walkCgroupV2Hierarchy(cgroupPath, mountPoint string) (uint64, error) {
+ var (
+ found = false
+ minLimit uint64 = math.MaxUint64
+ currentPath = cgroupPath
+ )
+ for {
+ limit, err := readMemoryLimitV2FromPath(filepath.Join(currentPath, "memory.max"))
+ if err != nil && !errors.Is(err, ErrNoLimit) {
+ return 0, err
+ } else if err == nil {
+ found = true
+ minLimit = min(minLimit, limit)
+ }
+
+ if currentPath == mountPoint {
+ break
+ }
+
+ parent := filepath.Dir(currentPath)
+ if parent == currentPath {
+ break
+ }
+ currentPath = parent
+ }
+ if !found {
+ return 0, ErrNoLimit
+ }
+
+ return minLimit, nil
+}
+
// getMemoryLimitV1 retrieves the memory limit from the cgroup v1 controller.
func getMemoryLimitV1(chs []cgroupHierarchy, mis []mountInfo) (uint64, error) {
// find the cgroup v1 path for the memory controller.