diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-12-10 22:06:44 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-12-10 22:06:44 +0100 |
commit | 7b3fd6313c4b07b6f822a9f979d0c22350a401d9 (patch) | |
tree | 936f7fa948b9d5eb2e417204108353c13e6485a9 /src/shared | |
parent | 0cd385d31814c8c1bc0c81d11ef321036b8b0921 (diff) |
scope: make attachment of initial PIDs a bit more robust
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/cgroup-util.c | 18 | ||||
-rw-r--r-- | src/shared/cgroup-util.h | 4 |
2 files changed, 16 insertions, 6 deletions
diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c index e595d895d2..1bcba01887 100644 --- a/src/shared/cgroup-util.c +++ b/src/shared/cgroup-util.c @@ -1624,7 +1624,7 @@ int cg_create_everywhere(CGroupControllerMask supported, CGroupControllerMask ma return 0; } -int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t pid) { +int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t pid, cg_migrate_callback_t path_callback, void *userdata) { CGroupControllerMask bit = 1; const char *n; int r; @@ -1634,8 +1634,18 @@ int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t return r; NULSTR_FOREACH(n, mask_names) { - if (supported & bit) + + if (supported & bit) { + const char *p = NULL; + + if (path_callback) + p = path_callback(bit, userdata); + + if (!p) + p = path; + cg_attach_fallback(n, path, pid); + } bit <<= 1; } @@ -1643,7 +1653,7 @@ int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t return 0; } -int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, Set* pids) { +int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, Set* pids, cg_migrate_callback_t path_callback, void *userdata) { Iterator i; void *pidp; int r = 0; @@ -1652,7 +1662,7 @@ int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, pid_t pid = PTR_TO_LONG(pidp); int q; - q = cg_attach_everywhere(supported, path, pid); + q = cg_attach_everywhere(supported, path, pid, path_callback, userdata); if (q < 0) r = q; } diff --git a/src/shared/cgroup-util.h b/src/shared/cgroup-util.h index a65f515b45..5e1e445c33 100644 --- a/src/shared/cgroup-util.h +++ b/src/shared/cgroup-util.h @@ -126,8 +126,8 @@ int cg_slice_to_path(const char *unit, char **ret); typedef const char* (*cg_migrate_callback_t)(CGroupControllerMask mask, void *userdata); int cg_create_everywhere(CGroupControllerMask supported, CGroupControllerMask mask, const char *path); -int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t pid); -int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, Set* pids); +int cg_attach_everywhere(CGroupControllerMask supported, const char *path, pid_t pid, cg_migrate_callback_t callback, void *userdata); +int cg_attach_many_everywhere(CGroupControllerMask supported, const char *path, Set* pids, cg_migrate_callback_t callback, void *userdata); int cg_migrate_everywhere(CGroupControllerMask supported, const char *from, const char *to, cg_migrate_callback_t callback, void *userdata); int cg_trim_everywhere(CGroupControllerMask supported, const char *path, bool delete_root); |