Skip to content
Snippets Groups Projects
Commit bb2b9b1f authored by Tilghman Lesher's avatar Tilghman Lesher
Browse files

Cause astcanary to exit if Asterisk exits abnormally and doesn't kill astcanary.

Also, add some documentation supporting the use of astcanary.
(closes issue #14538)
 Reported by: KNK
 Patches: 
       asterisk-1.6.x-astcanary.diff uploaded by KNK (license 545)


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@178303 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent 641dd68c
Branches
Tags
No related merge requests found
......@@ -30,7 +30,7 @@
* At one time, canaries were carried along with coal miners down
* into a mine. Their purpose was to alert the miners when they
* had drilled into a pocket of methane gas or another noxious
* substance. The canary, being the most sensitive animal would
* substance. The canary, being the most sensitive animal, would
* immediately fall over. Seeing this, the miners could take
* action to escape the mine, seeing an imminent danger.
*
......@@ -57,6 +57,18 @@
* the same time. This is also why this canary must exist as a
* completely separate process and not simply as a thread within
* Asterisk itself.
*
* Quote:
* "The nice value set with setpriority() shall be applied to the
* process. If the process is multi-threaded, the nice value shall
* affect all system scope threads in the process."
*
* Source:
* http://www.opengroup.org/onlinepubs/000095399/functions/setpriority.html
*
* In answer to the question, what aren't system scope threads, the
* answer is, in Asterisk, nothing. Process scope threads are the
* alternative, but they aren't supported in Linux.
*/
static const char explanation[] =
......@@ -77,7 +89,7 @@ int main(int argc, char *argv[])
int fd;
/* Run at normal priority */
setpriority(PRIO_PROCESS, 0, 0);
for (;;) {
for (; getppid() != 1;) {
/* Update the modification times (checked from Asterisk) */
if (utime(argv[1], NULL)) {
/* Recreate the file if it doesn't exist */
......@@ -96,7 +108,7 @@ int main(int argc, char *argv[])
sleep(5);
}
/* Never reached */
/* Reached if asterisk (our parent process) dies - its chldren are inherited by the init process (pid is 1). */
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment