Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-1-5]: src/sbin/shutdown pullup rev 1.37 from trunk (approved by t...



details:   https://anonhg.NetBSD.org/src/rev/1a6a59b6c4f3
branches:  netbsd-1-5
changeset: 488716:1a6a59b6c4f3
user:      jdolecek <jdolecek%NetBSD.org@localhost>
date:      Tue Jul 25 19:23:33 2000 +0000

description:
pullup rev 1.37 from trunk (approved by thorpej):
backoff rev. 1.35.6.1 - it's made obsolete by last rc.d changes and using
arbitrary hard time limit for /etc/rc.shutdown is not right anyway

diffstat:

 sbin/shutdown/shutdown.c |  70 ++++-------------------------------------------
 1 files changed, 6 insertions(+), 64 deletions(-)

diffs (128 lines):

diff -r d71268e7ba12 -r 1a6a59b6c4f3 sbin/shutdown/shutdown.c
--- a/sbin/shutdown/shutdown.c  Tue Jul 25 19:17:11 2000 +0000
+++ b/sbin/shutdown/shutdown.c  Tue Jul 25 19:23:33 2000 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: shutdown.c,v 1.35.6.1 2000/07/20 18:48:57 jdolecek Exp $       */
+/*     $NetBSD: shutdown.c,v 1.35.6.2 2000/07/25 19:23:33 jdolecek Exp $       */
 
 /*
  * Copyright (c) 1988, 1990, 1993
@@ -43,7 +43,7 @@
 #if 0
 static char sccsid[] = "@(#)shutdown.c 8.4 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: shutdown.c,v 1.35.6.1 2000/07/20 18:48:57 jdolecek Exp $");
+__RCSID("$NetBSD: shutdown.c,v 1.35.6.2 2000/07/25 19:23:33 jdolecek Exp $");
 #endif
 #endif /* not lint */
 
@@ -51,7 +51,6 @@
 #include <sys/time.h>
 #include <sys/resource.h>
 #include <sys/syslog.h>
-#include <sys/wait.h>
 
 #include <ctype.h>
 #include <err.h>
@@ -91,11 +90,7 @@
 #undef M
 #undef S
 
-/* time to wait for rc.shutdown to finish - 5 minutes by default */
-#define RCSHUTDOWN_TIMEOUT             (5 * 60)        
-
 static time_t offset, shuttime;
-static int rcshutdown_timeout = RCSHUTDOWN_TIMEOUT;
 static int dofast, dohalt, doreboot, killflg, mbuflen, nofork, nosync, dodump;
 static int dopowerdown;
 static const char *whom;
@@ -127,7 +122,7 @@
        if (geteuid())
                errx(1, "NOT super-user");
 #endif
-       while ((ch = getopt(argc, argv, "?DdfhknprT:")) != -1)
+       while ((ch = getopt(argc, argv, "Ddfhknpr")) != -1)
                switch (ch) {
                case 'd':
                        dodump = 1;
@@ -153,11 +148,6 @@
                case 'r':
                        doreboot = 1;
                        break;
-               case 'T':
-                       rcshutdown_timeout = (int) strtol(optarg, &endp, 10);
-                       if (*endp != '\0' || rcshutdown_timeout <= 0)
-                               errx(1, "invalid timeout value - must be positive number");
-                       break;
                case '?':
                default:
                        usage();
@@ -492,58 +482,10 @@
 void
 dorcshutdown()
 {
-       pid_t rc_pid, outpid;
-       time_t end_time;
-       int status;
-
        (void)printf("\r\nAbout to run shutdown hooks...\r\n");
-
-       rc_pid = fork();
-       switch (rc_pid) {
-       case -1:
-               /* error forking */
-               warn("dorcshutdown: fork");
-               break;
-       case 0:
-               /* child */
-               execl("/bin/sh", "sh", "-c", __CONCAT(". ", _PATH_RCSHUTDOWN),
-                               NULL);
-               err(1, "exec of '/bin/sh -c \". %s\" failed",
-                       _PATH_RCSHUTDOWN);
-               /* NOTREACHED */
-               break;
-       default:
-               /* parent */
-               end_time = time(NULL) + rcshutdown_timeout;
-               outpid = 0;
-               do {
-                       outpid = waitpid(rc_pid, &status, WNOHANG);
-                       if (outpid == rc_pid) {
-                               /* child exited */
-                               break;
-                       } else if (outpid == 0) {
-                               /* child not terminated yet */
-                               sleep(2);
-                       } else {
-                               /* an error occurred */
-                               warn("dorcshutdown: waitpid");
-                               break;
-                       }
-               } while(time(NULL) < end_time);
-
-               /* if rc.shutdown didn't exit within timeout, print warning */
-               if (outpid == 0) {
-                       warnx("%s didn't exit within timeout %ds, killed",
-                                _PATH_RCSHUTDOWN, rcshutdown_timeout);
-               }
-
-               /* if child did not exit voluntarily, kill it now */
-               if (outpid != rc_pid)
-                       (void) kill(rc_pid, SIGKILL);
-       }
-
+       (void)system(__CONCAT(". ", _PATH_RCSHUTDOWN));
+       (void)sleep(5);         /* Give operator a chance to abort this. */
        (void)printf("\r\nDone running shutdown hooks.\r\n");
-       (void)sleep(5);         /* Give operator a chance to abort this. */
 }
 
 #define        FSMSG   "fastboot file for fsck\n"
@@ -605,6 +547,6 @@
 {
 
        (void)fprintf(stderr,
-           "usage: shutdown [-Ddfhknpr] [-T timeout] time [message ... | -]\n");
+           "usage: shutdown [-Ddfhknpr] time [message ... | -]\n");
        exit(1);
 }



Home | Main Index | Thread Index | Old Index