Add a set of text to the file astcanary uses to communicate back the main
authorTilghman Lesher <tilghman@meg.abyt.es>
Sun, 18 May 2008 21:15:58 +0000 (21:15 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Sun, 18 May 2008 21:15:58 +0000 (21:15 +0000)
Asterisk process, which explains the purpose for the file being there.  This
should assist people who find the file and wonder why it exists.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@116948 65c4cc65-6c06-0410-ace0-fbb531ad65f3

utils/astcanary.c

index 785ec14..a0a295c 100644 (file)
@@ -24,6 +24,7 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <stdlib.h>
+#include <string.h>
 
 /*!\brief
  * At one time, canaries were carried along with coal miners down
  * Asterisk itself.
  */
 
+const char explanation[] =
+"This file is created when Asterisk is run with a realtime priority (-p).  It\n"
+"must continue to exist, and the astcanary process must be allowed to continue\n"
+"running, or else the Asterisk process will, within a short period of time,\n"
+"slow itself down to regular priority.\n\n"
+"The technical explanation for this file is to provide an assurance to Asterisk\n"
+"that there are no threads that have gone into runaway mode, thus hogging the\n"
+"CPU, and making the Asterisk machine seem to be unresponsive.  When that\n"
+"happens, the astcanary process will be unable to update the timestamp on this\n"
+"file, and Asterisk will notice within 120 seconds and react.  Slowing the\n"
+"Asterisk process down to regular priority will permit an administrator to\n"
+"intervene, thus avoiding a need to reboot the entire machine.\n";
+
 int main(int argc, char *argv[])
 {
        int fd;
@@ -67,10 +81,12 @@ int main(int argc, char *argv[])
                /* Update the modification times (checked from Asterisk) */
                if (utime(argv[1], NULL)) {
                        /* Recreate the file if it doesn't exist */
-                       if ((fd = open(argv[1], O_RDWR | O_TRUNC | O_CREAT, 0777)) > -1)
+                       if ((fd = open(argv[1], O_RDWR | O_TRUNC | O_CREAT, 0777)) > -1) {
+                               write(fd, explanation, strlen(explanation));
                                close(fd);
-                       else
+                       } else {
                                exit(1);
+                       }
                        continue;
                }