]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cgroup-util: add cg_read_pidref() helper
authorLennart Poettering <lennart@poettering.net>
Tue, 19 Sep 2023 14:05:01 +0000 (16:05 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 28 Sep 2023 21:22:58 +0000 (23:22 +0200)
Just like cg_read_pid() but returns a PidRef

src/basic/cgroup-util.c
src/basic/cgroup-util.h

index 92caccfcd476e9c282097ae417e1cc0aa2a7c1ba..947fb900d6bf8615c100b0165deb426e9006b6d2 100644 (file)
@@ -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,
index 6e7845345ae88eec44b1aff6b3967f9e35a6cf7e..b78c2475fa79d83c5cc584c83829ceaf2244359d 100644 (file)
@@ -10,6 +10,7 @@
 #include <sys/types.h>
 
 #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);