Fix log flushing and clean up output in boot failure handling.
authorDavin McCall <davmac@davmac.org>
Sat, 25 May 2019 08:27:13 +0000 (18:27 +1000)
committerDavin McCall <davmac@davmac.org>
Sat, 25 May 2019 08:27:13 +0000 (18:27 +1000)
src/dinit.cc

index 40d1fe3c8a6c2d9d0648337e843ade816cf7222d..a8d00491a1737ff888d4b1fa287a8f33f511cca6 100644 (file)
@@ -167,7 +167,7 @@ namespace {
     {
         using rearm = dasynq::rearm;
 
-        bool expired = false;
+        bool expired;
 
         public:
         rearm timer_expiry(eventloop_t &, int expiry_count)
@@ -180,6 +180,11 @@ namespace {
         {
             return expired;
         }
+
+        void reset()
+        {
+            expired = false;
+        }
     };
 
     control_socket_watcher control_socket_io;
@@ -475,6 +480,7 @@ int dinit_main(int argc, char **argv)
         }
     }
     
+    log_flush_timer.reset();
     log_flush_timer.arm_timer_rel(event_loop, timespec{5,0}); // 5 seconds
     while (! is_log_flushed() && ! log_flush_timer.has_expired()) {
         event_loop.run();
@@ -624,7 +630,7 @@ static void confirm_restart_boot() noexcept
     fcntl(STDIN_FILENO, F_SETFL, origFlags | O_NONBLOCK);
 
     do_prompt:
-    std::cout << "Please choose: (r)eboot, r(e)covery, re(s)tart boot sequence, (p)ower off?" << std::endl;
+    std::cout << "Choose: (r)eboot, r(e)covery, re(s)tart boot sequence, (p)ower off? " << std::flush;
 
     console_input_io.set_enabled(event_loop, true);
     do {
@@ -638,6 +644,7 @@ static void confirm_restart_boot() noexcept
         char buf[1];
         int r = read(STDIN_FILENO, buf, 1);  // read a single character, to make sure we wait for input
         if (r == 1) {
+            std::cout << "\n"; // force new line after input
             if (buf[0] == 'r' || buf[0] == 'R') {
                 services->stop_all_services(shutdown_type_t::REBOOT);
             }