}
}
+int cg_pidref_get_path(const char *controller, PidRef *pidref, char **ret_path) {
+ _cleanup_free_ char *path = NULL;
+ int r;
+
+ assert(ret_path);
+
+ if (!pidref_is_set(pidref))
+ return -ESRCH;
+
+ r = cg_pid_get_path(controller, pidref->pid, &path);
+ if (r < 0)
+ return r;
+
+ /* Before we return the path, make sure the procfs entry for this pid still matches the pidref */
+ r = pidref_verify(pidref);
+ if (r < 0)
+ return r;
+
+ *ret_path = TAKE_PTR(path);
+ return 0;
+}
+
int cg_install_release_agent(const char *controller, const char *agent) {
_cleanup_free_ char *fs = NULL, *contents = NULL;
const char *sc;
int cg_get_path_and_check(const char *controller, const char *path, const char *suffix, char **fs);
int cg_pid_get_path(const char *controller, pid_t pid, char **path);
+int cg_pidref_get_path(const char *controller, PidRef *pidref, char **path);
int cg_rmdir(const char *controller, const char *path);
assert(m);
- if (!pidref_is_set(pid))
- return NULL;
-
- if (cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, pid->pid, &cgroup) < 0)
+ if (cg_pidref_get_path(SYSTEMD_CGROUP_CONTROLLER, pid, &cgroup) < 0)
return NULL;
return manager_get_unit_by_cgroup(m, cgroup);