summary refs log tree commit diff
path: root/src/runit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/runit.c')
-rw-r--r--src/runit.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/runit.c b/src/runit.c
index 25da3b8..c6c9cea 100644
--- a/src/runit.c
+++ b/src/runit.c
@@ -41,6 +41,11 @@ void sig_int_handler (void) {
 }
 void sig_child_handler (void) { write(selfpipe[1], "", 1); }
 
+void sync_if_needed() {
+  struct stat s;
+  if (stat(NOSYNC, &s) == -1) sync();
+}
+
 int main (int argc, const char * const *argv, char * const *envp) {
   const char * prog[2];
   int pid, pid2;
@@ -305,28 +310,28 @@ int main (int argc, const char * const *argv, char * const *envp) {
   case -1:
   if ((stat(REBOOT, &s) != -1) && (s.st_mode & S_IXUSR)) {
     strerr_warn2(INFO, "system reboot.", 0);
-    sync();
+    sync_if_needed();
     reboot_system(RB_AUTOBOOT);
   }
   else {
 #ifdef RB_POWER_OFF
     strerr_warn2(INFO, "power off...", 0);
-    sync();
+    sync_if_needed();
     reboot_system(RB_POWER_OFF);
     sleep(2);
 #endif
 #ifdef RB_HALT_SYSTEM
     strerr_warn2(INFO, "system halt.", 0);
-    sync();
+    sync_if_needed();
     reboot_system(RB_HALT_SYSTEM);
 #else
 #ifdef RB_HALT
     strerr_warn2(INFO, "system halt.", 0);
-    sync();
+    sync_if_needed();
     reboot_system(RB_HALT);
 #else
     strerr_warn2(INFO, "system reboot.", 0);
-    sync();
+    sync_if_needed();
     reboot_system(RB_AUTOBOOT);
 #endif
 #endif