Browse Source

Delay initialisation of event loop until std file descriptors set up

This is a step towards being able to boot BSDs, which start init with
fd's 0/1/2 closed. Initialising the event loop immediately then opens a
file (kqueue) which takes fd 0. This then gets clobbered when we set std
file descriptors via /dev/console.
Davin McCall 3 years ago
parent
commit
ce7ceb3841
1 changed files with 3 additions and 1 deletions
  1. 3 1
      src/dinit.cc

+ 3 - 1
src/dinit.cc

@@ -52,7 +52,7 @@ using namespace cts;
 
 using eventloop_t = dasynq::event_loop<dasynq::null_mutex>;
 
-eventloop_t event_loop;
+eventloop_t event_loop(dasynq::delayed_init {});
 
 static void sigint_reboot_cb(eventloop_t &eloop) noexcept;
 static void sigquit_cb(eventloop_t &eloop) noexcept;
@@ -339,6 +339,8 @@ int dinit_main(int argc, char **argv)
     
     signal(SIGPIPE, SIG_IGN);
     
+    event_loop.init();
+
     if (!am_system_init && !control_socket_path_set) {
         const char * userhome = service_dir_opt::get_user_home();
         if (userhome != nullptr) {