From: Lennart Poettering Date: Tue, 19 Sep 2023 14:05:01 +0000 (+0200) Subject: cgroup-util: add cg_read_pidref() helper X-Git-Tag: v255-rc1~387^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=12c7d27b654859818db407aa8ad35c0d00a0057c;p=thirdparty%2Fsystemd.git cgroup-util: add cg_read_pidref() helper Just like cg_read_pid() but returns a PidRef --- diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index 92caccfcd47..947fb900d6b 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -90,6 +90,33 @@ int cg_read_pid(FILE *f, pid_t *ret) { return 1; } +int cg_read_pidref(FILE *f, PidRef *ret) { + int r; + + assert(f); + assert(ret); + + for (;;) { + pid_t pid; + + r = cg_read_pid(f, &pid); + if (r < 0) + return r; + if (r == 0) { + *ret = PIDREF_NULL; + return 0; + } + + r = pidref_set_pid(ret, pid); + if (r >= 0) + return 1; + if (r != -ESRCH) + return r; + + /* ESRCH → gone by now? just skip over it, read the next */ + } +} + int cg_read_event( const char *controller, const char *path, diff --git a/src/basic/cgroup-util.h b/src/basic/cgroup-util.h index 6e7845345ae..b78c2475fa7 100644 --- a/src/basic/cgroup-util.h +++ b/src/basic/cgroup-util.h @@ -10,6 +10,7 @@ #include #include "constants.h" +#include "pidref.h" #include "set.h" #define SYSTEMD_CGROUP_CONTROLLER_LEGACY "name=systemd" @@ -178,6 +179,7 @@ typedef enum CGroupUnified { int cg_enumerate_processes(const char *controller, const char *path, FILE **ret); int cg_read_pid(FILE *f, pid_t *ret); +int cg_read_pidref(FILE *f, PidRef *ret); int cg_read_event(const char *controller, const char *path, const char *event, char **ret); int cg_enumerate_subgroups(const char *controller, const char *path, DIR **ret);