chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
c9106f6
)
cgroup: if we are already in our own cgroup, then reuse it
author
Lennart Poettering
<lennart@poettering.net>
Wed, 21 Apr 2010 01:18:05 +0000
(
03:18
+0200)
committer
Lennart Poettering
<lennart@poettering.net>
Wed, 21 Apr 2010 01:18:05 +0000
(
03:18
+0200)
cgroup.c
patch
|
blob
|
history
diff --git
a/cgroup.c
b/cgroup.c
index 565ce24ce18725159b9763d2e15f558cdbfb6f49..4ceaf382771a803e0a692c26f8d791bfb28ca3d0 100644
(file)
--- a/
cgroup.c
+++ b/
cgroup.c
@@
-414,6
+414,7
@@
int manager_setup_cgroup(Manager *m) {
char *mp, *cp;
int r;
pid_t pid;
char *mp, *cp;
int r;
pid_t pid;
+ char suffix[32];
assert(m);
assert(m);
@@
-436,12
+437,25
@@
int manager_setup_cgroup(Manager *m) {
return translate_error(r, errno);
}
return translate_error(r, errno);
}
+ snprintf(suffix, sizeof(suffix), "/systemd-%u", (unsigned) pid);
+ char_array_0(suffix);
+
free(m->cgroup_hierarchy);
free(m->cgroup_hierarchy);
- m->cgroup_hierarchy = NULL;
- if (asprintf(&m->cgroup_hierarchy, "%s/systemd-%llu", strcmp(cp, "/") == 0 ? "" : cp, (unsigned long long) pid) < 0) {
+
+ if (endswith(cp, suffix))
+ /* We probably got reexecuted and can continue to use our root cgroup */
+ m->cgroup_hierarchy = cp;
+ else {
+ /* We need a new root cgroup */
+
+ m->cgroup_hierarchy = NULL;
+ r = asprintf(&m->cgroup_hierarchy, "%s%s", streq(cp, "/") ? "" : cp, suffix);
free(cp);
free(cp);
- free(mp);
- return -ENOMEM;
+
+ if (r < 0) {
+ free(mp);
+ return -ENOMEM;
+ }
}
log_info("Using cgroup controller <%s>, hierarchy mounted at <%s>, using root group <%s>.",
}
log_info("Using cgroup controller <%s>, hierarchy mounted at <%s>, using root group <%s>.",
@@
-455,7
+469,6
@@
int manager_setup_cgroup(Manager *m) {
log_info("Installed release agent, or already installed.");
free(mp);
log_info("Installed release agent, or already installed.");
free(mp);
- free(cp);
if ((r = create_hierarchy_cgroup(m)) < 0)
log_error("Failed to create root cgroup hierarchy: %s", strerror(-r));
if ((r = create_hierarchy_cgroup(m)) < 0)
log_error("Failed to create root cgroup hierarchy: %s", strerror(-r));