summaryrefslogtreecommitdiffstats
path: root/linux/LinuxProcessList.c
diff options
context:
space:
mode:
authorBenny Baumann <BenBE@geshi.org>2021-10-19 23:36:31 +0200
committerBenBE <BenBE@geshi.org>2021-11-28 20:19:10 +0100
commit9dc964bb42526d21e1221945ba96a0c87e58d040 (patch)
tree0d293ad30f62557a30e20e453869d7bcd9d772f4 /linux/LinuxProcessList.c
parentea4282784de0a74fa97d9ca917f7f601c16aab64 (diff)
Compress cgroup names based on some heuristics
Diffstat (limited to 'linux/LinuxProcessList.c')
-rw-r--r--linux/LinuxProcessList.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c
index 6b9f988f..74566ab8 100644
--- a/linux/LinuxProcessList.c
+++ b/linux/LinuxProcessList.c
@@ -45,6 +45,7 @@ in the source distribution for its full text.
#include "Process.h"
#include "Settings.h"
#include "XUtils.h"
+#include "linux/CGroupUtils.h"
#include "linux/LinuxProcess.h"
#include "linux/Platform.h" // needed for GNU/hurd to get PATH_MAX // IWYU pragma: keep
@@ -860,6 +861,10 @@ static void LinuxProcessList_readCGroupFile(LinuxProcess* process, openat_arg_t
free(process->cgroup);
process->cgroup = NULL;
}
+ if (process->cgroup_short) {
+ free(process->cgroup_short);
+ process->cgroup_short = NULL;
+ }
return;
}
char output[PROC_LINE_LENGTH + 1];
@@ -892,7 +897,22 @@ static void LinuxProcessList_readCGroupFile(LinuxProcess* process, openat_arg_t
left -= wrote;
}
fclose(file);
+
+ bool changed = !process->cgroup || !String_eq(process->cgroup, output);
+
free_and_xStrdup(&process->cgroup, output);
+
+ if (!changed)
+ return;
+
+ char* cgroup_short = xCalloc(strlen(process->cgroup) + 1, 1);
+ if (CGroup_filterName(process->cgroup, cgroup_short, strlen(process->cgroup) + 1)) {
+ free_and_xStrdup(&process->cgroup_short, cgroup_short);
+ } else {
+ free(process->cgroup_short);
+ process->cgroup_short = NULL;
+ }
+ free(cgroup_short);
}
#ifdef HAVE_VSERVER

© 2014-2024 Faster IT GmbH | imprint | privacy policy