]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 379510 via svnmerge from
authorAutomerge script <automerge@asterisk.org>
Sat, 19 Jan 2013 00:24:45 +0000 (00:24 +0000)
committerAutomerge script <automerge@asterisk.org>
Sat, 19 Jan 2013 00:24:45 +0000 (00:24 +0000)
file:///srv/subversion/repos/asterisk/branches/10

................
  r379510 | mjordan | 2013-01-18 18:07:52 -0600 (Fri, 18 Jan 2013) | 21 lines

  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
................

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10-digiumphones@379535 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/asterisk.c

index 44be5bb30ef5b9ef188a94f9b2331d8fcd74a1a4..f089340727fac811819c4094b01b1638bac600de 100644 (file)
@@ -3789,6 +3789,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");
@@ -3840,11 +3842,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));