From: Sven Eden Date: Wed, 14 Jun 2017 15:44:53 +0000 (+0200) Subject: Prep v231: Apply missing fixes from upstream (4/6) src/login X-Git-Tag: v231.3~54 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=c651a8a1445336b303e7ffdbcc9c8a4ef5389a4e;p=elogind.git Prep v231: Apply missing fixes from upstream (4/6) src/login --- diff --git a/src/login/logind-core.c b/src/login/logind-core.c index 0e7786f10..e505fcb0e 100644 --- a/src/login/logind-core.c +++ b/src/login/logind-core.c @@ -458,7 +458,7 @@ int manager_spawn_autovt(Manager *m, unsigned int vtnr) { m->bus, "org.freedesktop.systemd1", "/org/freedesktop/systemd1", - "org.freedesktop.systemd.Manager", + "org.freedesktop.systemd1.Manager", "StartUnit", &error, NULL, diff --git a/src/login/logind-gperf.gperf b/src/login/logind-gperf.gperf index 4dbabd455..c7f54b5f5 100644 --- a/src/login/logind-gperf.gperf +++ b/src/login/logind-gperf.gperf @@ -34,7 +34,7 @@ Login.RuntimeDirectorySize, config_parse_tmpfs_size, 0, offsetof(Manag Login.RemoveIPC, config_parse_bool, 0, offsetof(Manager, remove_ipc) Login.InhibitorsMax, config_parse_uint64, 0, offsetof(Manager, inhibitors_max) Login.SessionsMax, config_parse_uint64, 0, offsetof(Manager, sessions_max) -Login.UserTasksMax, config_parse_uint64, 0, offsetof(Manager, user_tasks_max) +Login.UserTasksMax, config_parse_user_tasks_max,0, offsetof(Manager, user_tasks_max) Sleep.SuspendMode, config_parse_strv, 0, offsetof(Manager, suspend_mode) Sleep.SuspendState, config_parse_strv, 0, offsetof(Manager, suspend_state) Sleep.HibernateMode, config_parse_strv, 0, offsetof(Manager, hibernate_mode) diff --git a/src/login/logind-session.c b/src/login/logind-session.c index 3a77b833f..06ad99e1f 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -635,7 +635,6 @@ int session_start(Session *s) { #if 0 /// UNNEEDED by elogind static int session_stop_scope(Session *s, bool force) { _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; - char *job = NULL; int r; assert(s); @@ -643,22 +642,25 @@ static int session_stop_scope(Session *s, bool force) { if (!s->scope) return 0; + /* Let's always abandon the scope first. This tells systemd that we are not interested anymore, and everything + * that is left in in the scope is "left-over". Informing systemd about this has the benefit that it will log + * when killing any processes left after this point. */ + r = manager_abandon_scope(s->manager, s->scope, &error); + if (r < 0) + log_warning_errno(r, "Failed to abandon session scope, ignoring: %s", bus_error_message(&error, r)); + + /* Optionally, let's kill everything that's left now. */ if (force || manager_shall_kill(s->manager, s->user->name)) { + char *job = NULL; + r = manager_stop_unit(s->manager, s->scope, &error, &job); - if (r < 0) { - log_error("Failed to stop session scope: %s", bus_error_message(&error, r)); - return r; - } + if (r < 0) + return log_error_errno(r, "Failed to stop session scope: %s", bus_error_message(&error, r)); free(s->scope_job); s->scope_job = job; - } else { - r = manager_abandon_scope(s->manager, s->scope, &error); - if (r < 0) { - log_error("Failed to abandon session scope: %s", bus_error_message(&error, r)); - return r; - } - } + } else + s->scope_job = mfree(s->scope_job); return 0; } @@ -1076,13 +1078,10 @@ int session_kill(Session *s, KillWho who, int signo) { return log_error_errno(errno, "Failed to kill process leader %d for session %s: %m", s->leader, s->id); } return 0; - } else { - bool sigcont = false; - bool ignore_self = true; - bool rem = true; + } else return cg_kill_recursive (SYSTEMD_CGROUP_CONTROLLER, s->id, signo, - sigcont, ignore_self, rem, NULL); - } + CGROUP_IGNORE_SELF | CGROUP_REMOVE, + NULL, NULL, NULL); #endif // 0 } diff --git a/src/login/test-login-shared.c b/src/login/test-login-shared.c index 76220d25d..47d8bf077 100644 --- a/src/login/test-login-shared.c +++ b/src/login/test-login-shared.c @@ -22,7 +22,6 @@ /// Additional includes needed by elogind #include "musl_missing.h" - static void test_session_id_valid(void) { assert_se(session_id_valid("c1")); assert_se(session_id_valid("1234"));