chiark / gitweb /
Prep v231: Apply missing fixes from upstream (4/6) src/login
authorSven Eden <yamakuzure@gmx.net>
Wed, 14 Jun 2017 15:44:53 +0000 (17:44 +0200)
committerSven Eden <yamakuzure@gmx.net>
Fri, 16 Jun 2017 08:13:01 +0000 (10:13 +0200)
src/login/logind-core.c
src/login/logind-gperf.gperf
src/login/logind-session.c
src/login/test-login-shared.c

index 0e7786f10395f373bca521b9bfa8a694eee0babe..e505fcb0ed987ad0c8f43beb5a2b4b37afc6c940 100644 (file)
@@ -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,
index 4dbabd455a43a6e599670175d61439e6448ca515..c7f54b5f5df8e3e9f2af0543d337125b0221e888 100644 (file)
@@ -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)
index 3a77b833f53b5d1e8ea5fa9e8a308acbc202e162..06ad99e1fec4eaeb6d0488de1bc4e6a0b6ca99b7 100644 (file)
@@ -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
 }
 
index 76220d25d47bea2b1e59d38b996ac57b7005f152..47d8bf077a6a25bbdd243411bf283083b0f848c8 100644 (file)
@@ -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"));