diff options
Diffstat (limited to 'utils/astcanary.c')
-rw-r--r-- | utils/astcanary.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/utils/astcanary.c b/utils/astcanary.c index 785ec14c4..a0a295ca3 100644 --- a/utils/astcanary.c +++ b/utils/astcanary.c @@ -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 @@ -58,6 +59,19 @@ * 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; } |