Don't add console watcher if not PID 1.
authorDavin McCall <davmac@davmac.org>
Sat, 27 Jul 2019 07:03:41 +0000 (17:03 +1000)
committerDavin McCall <davmac@davmac.org>
Sat, 27 Jul 2019 07:03:41 +0000 (17:03 +1000)
If not PID 1, we don't need to ask for console input. Adding a watcher
fails if we don't have a (suitable) stdin, eg FreeBSD shell if dinit is
run in background.

src/dinit.cc

index 2481032d9a027451930e293c272da1d857d5cf78..0c50f47cdd56a97b0e0a9253b12f3b411b30dd27 100644 (file)
@@ -388,12 +388,12 @@ int dinit_main(int argc, char **argv)
 
     sigint_watcher.add_watch(event_loop, SIGINT);
     sigterm_watcher.add_watch(event_loop, SIGTERM);
-    console_input_io.add_watch(event_loop, STDIN_FILENO, dasynq::IN_EVENTS, false);
     
     if (am_pid_one) {
-        // PID 1: SIGQUIT exec's shutdown
+        // PID 1: we may ask for console input; SIGQUIT exec's shutdown
+        console_input_io.add_watch(event_loop, STDIN_FILENO, dasynq::IN_EVENTS, false);
         sigquit_watcher.add_watch(event_loop, SIGQUIT);
-        // As a user process, we instead just let SIGQUIT perform the default action.
+        // (If not PID 1, we instead just let SIGQUIT perform the default action.)
     }
 
     // Try to open control socket (may fail due to readonly filesystem)