chiark / gitweb /
systemctl: load unit if needed when isolating
[elogind.git] / main.c
diff --git a/main.c b/main.c
index 06ad42959bc8b057d0da9537d3f77db41e95ee39..d2721fd0996ea975a17b4a4d328fecedd21263eb 100644 (file)
--- a/main.c
+++ b/main.c
@@ -164,7 +164,7 @@ static void install_crash_handler(void) {
         assert_se(sigaction(SIGABRT, &sa, NULL) == 0);
 }
 
-static int console_setup(void) {
+static int console_setup(bool do_reset) {
         int tty_fd = -1, null_fd = -1, r = 0;
 
         /* If we are init, we connect stdout/stderr to /dev/console
@@ -188,8 +188,9 @@ static int console_setup(void) {
         assert(tty_fd >= 3);
         assert(null_fd >= 3);
 
-        if (reset_terminal(tty_fd) < 0)
-                log_error("Failed to reset /dev/console: %m");
+        if (do_reset)
+                if (reset_terminal(tty_fd) < 0)
+                        log_error("Failed to reset /dev/console: %m");
 
         if (dup2(tty_fd, STDOUT_FILENO) < 0 ||
             dup2(tty_fd, STDERR_FILENO) < 0 ||
@@ -612,8 +613,10 @@ int main(int argc, char *argv[]) {
                 umask(0);
         }
 
-        if (running_as == MANAGER_INIT)
-                console_setup();
+        /* Reset the console, but only if this is really init and we
+         * are freshly booted */
+        if (running_as == MANAGER_INIT && action == ACTION_RUN)
+                console_setup(getpid() == 1 && !serialization);
 
         /* Make sure D-Bus doesn't fiddle with the SIGPIPE handlers */
         dbus_connection_set_change_sigpipe(FALSE);
@@ -665,7 +668,7 @@ int main(int argc, char *argv[]) {
                 }
 
                 if (action == ACTION_TEST) {
-                        printf(" By units:\n");
+                        printf("-> By units:\n");
                         manager_dump_units(m, stdout, "\t");
                 }
 
@@ -675,7 +678,7 @@ int main(int argc, char *argv[]) {
                 }
 
                 if (action == ACTION_TEST) {
-                        printf(" By jobs:\n");
+                        printf("-> By jobs:\n");
                         manager_dump_jobs(m, stdout, "\t");
                         retval = 0;
                         goto finish;