aboutsummaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-05-18 21:15:58 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-05-18 21:15:58 +0000
commit6410c3d334d0cda955313f22810c72e877f04a9d (patch)
tree89274e06bde0b330297ae13574959963b9faeb1e /utils
parent53e5a0494829dc01c4ed4da3b6a91af0ad3dc7cb (diff)
Add a set of text to the file astcanary uses to communicate back the main
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: http://svn.digium.com/svn/asterisk/trunk@116948 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'utils')
-rw-r--r--utils/astcanary.c20
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;
}