X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fcgroup.c;h=1a8fd3728f06acf9179a2170d175507b77e8a91e;hb=df2d202e6ed4001a21c6512c244acad5d4706c87;hp=f2a99c76b7612c0bbb57b491734859b29065a5be;hpb=15c60e99a974782351ca8a5ed438dc3729eb5fe7;p=elogind.git diff --git a/src/core/cgroup.c b/src/core/cgroup.c index f2a99c76b..1a8fd3728 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -376,23 +376,23 @@ static CGroupControllerMask unit_get_siblings_mask(Unit *u) { } static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) { - char *path = NULL; + _cleanup_free_ char *path; int r; - bool is_in_hash = false; + bool was_in_hash = false; assert(u); path = unit_default_cgroup_path(u); if (!path) - return -ENOMEM; + return log_oom(); r = hashmap_put(u->manager->cgroup_unit, path, u); if (r == 0) - is_in_hash = true; - - if (r < 0) { - log_error("cgroup %s exists already: %s", path, strerror(-r)); - free(path); + was_in_hash = true; + else if (r < 0) { + log_error(r == -EEXIST ? + "cgroup %s exists already: %s" : "hashmap_put failed for %s: %s", + path, strerror(-r)); return r; } @@ -405,13 +405,15 @@ static int unit_create_cgroups(Unit *u, CGroupControllerMask mask) { if (u->cgroup_path) { r = cg_migrate_everywhere(u->manager->cgroup_supported, u->cgroup_path, path); if (r < 0) - log_error("Failed to migrate cgroup %s: %s", path, strerror(-r)); + log_error("Failed to migrate cgroup from %s to %s: %s", + u->cgroup_path, path, strerror(-r)); } - if (!is_in_hash) { - /* And remember the new data */ + if (!was_in_hash) { + /* Remember the new data */ free(u->cgroup_path); u->cgroup_path = path; + path = NULL; } u->cgroup_realized = true; @@ -509,7 +511,7 @@ int unit_realize_cgroup(Unit *u) { * unit, we need to first create all parents, but there's more * actually: for the weight-based controllers we also need to * make sure that all our siblings (i.e. units that are in the - * same slice as we are) have cgroup too. Otherwise things + * same slice as we are) have cgroups, too. Otherwise things * would become very uneven as each of their processes would * get as much resources as all our group together. This call * will synchronously create the parent cgroups, but will