summaryrefslogtreecommitdiff
path: root/main/asterisk.c
diff options
context:
space:
mode:
authorMatthew Jordan <mjordan@digium.com>2013-01-19 00:19:19 +0000
committerMatthew Jordan <mjordan@digium.com>2013-01-19 00:19:19 +0000
commit01763fd41b1325f56d727023b8a92697f272f285 (patch)
tree0a31b2070754d0110f56e99a529880a2c08b6c8e /main/asterisk.c
parentbc97a4ded17bee63555b6215a5ec3d3206f8eec1 (diff)
Fix astcanary startup problem due to wrong pid value from before daemon call
When Asterisk forks itself into the background via a call to daemon, it must re-set the pid value of the new process. Otherwise, astcanary gets the pid value of the process before the fork, which prevents it from running. Asterisk eventually starts lowering its priority, as it can no longer communicate with the proverbial canary in the coal mine. This patch ensures that the correct process identifier is used by astcanary. Note that this is getting committed to 10 as a regression fix. (closes issue ASTERISK-20947) Reported by: Jakob Hirsch Tested by: mjordan patches: asterisk-10.12.0.astcanary_ppid.diff uploaded by Jakob Hirsch (license 6113) ........ Merged revisions 379509 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 379510 from http://svn.asterisk.org/svn/asterisk/branches/10 ........ Merged revisions 379513 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@379518 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/asterisk.c')
-rw-r--r--main/asterisk.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/main/asterisk.c b/main/asterisk.c
index beaa1493c..380a3d248 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -3984,6 +3984,8 @@ int main(int argc, char *argv[])
#ifndef HAVE_SBIN_LAUNCHD
if (daemon(1, 0) < 0) {
fprintf(stderr, "daemon() failed: %s\n", strerror(errno));
+ } else {
+ ast_mainpid = getpid();
}
#else
fprintf(stderr, "Mac OS X detected. Use 'launchctl load /Library/LaunchDaemon/org.asterisk.asterisk.plist'.\n");
@@ -4035,11 +4037,10 @@ int main(int argc, char *argv[])
}
/* Blindly write the PID file. */
- ast_mainpid = getpid();
unlink(ast_config_AST_PID);
f = fopen(ast_config_AST_PID, "w");
if (f) {
- fprintf(f, "%ld\n", (long)getpid());
+ fprintf(f, "%ld\n", (long)ast_mainpid);
fclose(f);
} else {
fprintf(stderr, "Unable to open pid file '%s': %s\n", ast_config_AST_PID, strerror(errno));