X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcgroup.c;h=108c4fcf5e1799d3503bb1f433bf4bd7df9cd412;hp=fb4047f2153cb49d10fb69ea413f7234a80255d6;hb=0213c3f8102bdc934c629d11a44ca0b408762287;hpb=7c64bbc3875930c045d53f09e244dff8607370e6 diff --git a/src/cgroup.c b/src/cgroup.c index fb4047f21..108c4fcf5 100644 --- a/src/cgroup.c +++ b/src/cgroup.c @@ -70,12 +70,7 @@ int cgroup_bonding_realize(CGroupBonding *b) { goto fail; } - if (b->inherit) - r = cgroup_create_cgroup_from_parent(b->cgroup, true); - else - r = cgroup_create_cgroup(b->cgroup, true); - - if (r != 0) { + if ((r = cgroup_create_cgroup(b->cgroup, true)) != 0) { r = translate_error(r, errno); goto fail; } @@ -540,6 +535,37 @@ int cgroup_notify_empty(Manager *m, const char *group) { return 0; } +Unit* cgroup_unit_by_pid(Manager *m, pid_t pid) { + CGroupBonding *l, *b; + char *group = NULL; + int r; + + assert(m); + + if (pid <= 1) + return NULL; + + if ((r = cgroup_get_current_controller_path(pid, m->cgroup_controller, &group))) + return NULL; + + l = hashmap_get(m->cgroup_bondings, group); + free(group); + + if (!l) + return NULL; + + LIST_FOREACH(by_path, b, l) { + + if (!b->unit) + continue; + + if (b->only_us) + return b->unit; + } + + return NULL; +} + CGroupBonding *cgroup_bonding_find_list(CGroupBonding *first, const char *controller) { CGroupBonding *b;