[asterisk-commits] mjordan: branch 1.8 r379509 - /branches/1.8/main/asterisk.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Jan 18 17:26:06 CST 2013
Author: mjordan
Date: Fri Jan 18 17:26:02 2013
New Revision: 379509
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=379509
Log:
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.
(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)
Modified:
branches/1.8/main/asterisk.c
Modified: branches/1.8/main/asterisk.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/main/asterisk.c?view=diff&rev=379509&r1=379508&r2=379509
==============================================================================
--- branches/1.8/main/asterisk.c (original)
+++ branches/1.8/main/asterisk.c Fri Jan 18 17:26:02 2013
@@ -3756,6 +3756,8 @@
#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");
@@ -3812,11 +3814,10 @@
}
/* 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));
More information about the asterisk-commits
mailing list