watchdog: don't use static variable
authorDenis Vlasenko <vda.linux@googlemail.com>
Wed, 14 Mar 2007 21:55:41 +0000 (21:55 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Wed, 14 Mar 2007 21:55:41 +0000 (21:55 -0000)
miscutils/watchdog.c

index 9dbefb985ee343daa694e60e03cdd05931eaaca9..ed9026d9e449f31516fbb0c77a7170909e4c7227 100644 (file)
 #define OPT_FOREGROUND 0x01
 #define OPT_TIMER      0x02
 
-/* Watchdog file descriptor */
-static int fd;
-
-static void watchdog_shutdown(int ATTRIBUTE_UNUSED unused)
+static void watchdog_shutdown(int ATTRIBUTE_UNUSED sig) ATTRIBUTE_NORETURN;
+static void watchdog_shutdown(int ATTRIBUTE_UNUSED sig)
 {
-       write(fd, "V", 1);      /* Magic, see watchdog-api.txt in kernel */
-       close(fd);
+       write(3, "V", 1);       /* Magic, see watchdog-api.txt in kernel */
+       if (ENABLE_FEATURE_CLEAN_UP)
+               close(3);
        exit(0);
 }
 
@@ -49,18 +48,19 @@ int watchdog_main(int argc, char **argv)
        signal(SIGHUP, watchdog_shutdown);
        signal(SIGINT, watchdog_shutdown);
 
-       fd = xopen(argv[argc - 1], O_WRONLY);
+       /* Use known fd # - avoid needing global 'int fd' */
+       dup2(xopen(argv[argc - 1], O_WRONLY), 3);
 
        while (1) {
                /*
                 * Make sure we clear the counter before sleeping, as the counter value
                 * is undefined at this point -- PFM
                 */
-               write(fd, "\0", 1);
+               write(3, "", 1);
                sleep(timer_duration);
        }
 
        watchdog_shutdown(0);
 
-       return EXIT_SUCCESS;
+       /* return EXIT_SUCCESS; */
 }