X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Flogind-session.c;h=662273b07f6a22d69dbdd1fdb5dd4dbeb7fae4a3;hb=a20affe2f0fb4c8d488155a0b860549e9389f32a;hp=508336d4d3b6fbc756917f8f804a0965f2e187a8;hpb=e2acb67baaa1d63685dcaf80becf10291f13d086;p=elogind.git diff --git a/src/login/logind-session.c b/src/login/logind-session.c index 508336d4d..662273b07 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -436,15 +436,14 @@ static int session_create_one_group(Session *s, const char *controller, const ch int r; assert(s); - assert(controller); assert(path); if (s->leader > 0) { r = cg_create_and_attach(controller, path, s->leader); if (r < 0) - r = cg_create(controller, path); + r = cg_create(controller, path, NULL); } else - r = cg_create(controller, path); + r = cg_create(controller, path, NULL); if (r < 0) return r; @@ -466,7 +465,18 @@ static int session_create_cgroup(Session *s) { assert(s->user->cgroup_path); if (!s->cgroup_path) { - if (asprintf(&p, "%s/%s", s->user->cgroup_path, s->id) < 0) + _cleanup_free_ char *name = NULL, *escaped = NULL; + + name = strappend(s->id, ".session"); + if (!name) + return log_oom(); + + escaped = cg_escape(name); + if (!escaped) + return log_oom(); + + p = strjoin(s->user->cgroup_path, "/", escaped, NULL); + if (!p) return log_oom(); } else p = s->cgroup_path; @@ -710,6 +720,8 @@ int session_stop(Session *s) { if (s->started) session_send_signal(s, false); + s->started = false; + if (s->seat) { if (s->seat->active == s) seat_set_active(s->seat, NULL); @@ -721,8 +733,6 @@ int session_stop(Session *s) { user_send_changed(s->user, "Sessions\0"); user_save(s->user); - s->started = false; - return r; }