X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcgroup.c;h=c1ea95ab5600f7ace47b6db1cb3c7c8dd54971d8;hp=02c2919187dfcf842245e12d9d3ad4a66db384be;hb=5948ee7ceff829965a72c5a636aae1e9c2bcc065;hpb=35d2e7ec19f8d3960a14dc04642060ccee3faa43 diff --git a/src/cgroup.c b/src/cgroup.c index 02c291918..c1ea95ab5 100644 --- a/src/cgroup.c +++ b/src/cgroup.c @@ -1,4 +1,4 @@ -/*-*- Mode: C; c-basic-offset: 8 -*-*/ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ /*** This file is part of systemd. @@ -231,7 +231,7 @@ int manager_setup_cgroup(Manager *m) { } else { /* We need a new root cgroup */ m->cgroup_hierarchy = NULL; - if ((r = asprintf(&m->cgroup_hierarchy, "%s%s", streq(current, "/") ? "" : current, suffix)) < 0) { + if (asprintf(&m->cgroup_hierarchy, "%s%s", streq(current, "/") ? "" : current, suffix) < 0) { r = -ENOMEM; goto finish; } @@ -325,17 +325,31 @@ int cgroup_notify_empty(Manager *m, const char *group) { 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 = cg_get_by_pid(SYSTEMD_CGROUP_CONTROLLER, pid, &group))) + if (cg_get_by_pid(SYSTEMD_CGROUP_CONTROLLER, pid, &group) < 0) return NULL; l = hashmap_get(m->cgroup_bondings, group); + + if (!l) { + char *slash; + + while ((slash = strrchr(group, '/'))) { + if (slash == group) + break; + + *slash = 0; + + if ((l = hashmap_get(m->cgroup_bondings, group))) + break; + } + } + free(group); LIST_FOREACH(by_path, b, l) {