Author: trociny
Date: Thu Mar 29 20:11:16 2012
New Revision: 233679
URL: http://svn.freebsd.org/changeset/base/233679

Log:
  If hastd is invoked with "-P pidfile" option always create pidfile
  regardless of whether -F (foreground) option is set or not.
  
  Also, if -P option is specified, ignore pidfile setting from configuration
  not only on start but on reload too. This fixes the issue when for hastd
  run with -P option reload caused the pidfile change.
  
  Reviewed by:  pjd
  MFC after:    1 week

Modified:
  head/sbin/hastd/hastd.c

Modified: head/sbin/hastd/hastd.c
==============================================================================
--- head/sbin/hastd/hastd.c     Thu Mar 29 19:29:24 2012        (r233678)
+++ head/sbin/hastd/hastd.c     Thu Mar 29 20:11:16 2012        (r233679)
@@ -66,6 +66,8 @@ const char *cfgpath = HAST_CONFIG;
 static struct hastd_config *cfg;
 /* Was SIGINT or SIGTERM signal received? */
 bool sigexit_received = false;
+/* Path to pidfile. */
+static const char *pidfile;
 /* PID file handle. */
 struct pidfh *pfh;
 /* Do we run in foreground? */
@@ -537,7 +539,8 @@ hastd_reload(void)
        /*
         * Check if pidfile's path has changed.
         */
-       if (!foreground && strcmp(cfg->hc_pidfile, newcfg->hc_pidfile) != 0) {
+       if (!foreground && pidfile == NULL &&
+           strcmp(cfg->hc_pidfile, newcfg->hc_pidfile) != 0) {
                newpfh = pidfile_open(newcfg->hc_pidfile, 0600, &otherpid);
                if (newpfh == NULL) {
                        if (errno == EEXIST) {
@@ -1163,14 +1166,12 @@ int
 main(int argc, char *argv[])
 {
        struct hastd_listen *lst;
-       const char *pidfile;
        pid_t otherpid;
        int debuglevel;
        sigset_t mask;
 
        foreground = false;
        debuglevel = 0;
-       pidfile = NULL;
 
        for (;;) {
                int ch;
@@ -1230,7 +1231,7 @@ main(int argc, char *argv[])
                }
        }
 
-       if (!foreground) {
+       if (pidfile != NULL || !foreground) {
                pfh = pidfile_open(cfg->hc_pidfile, 0600, &otherpid);
                if (pfh == NULL) {
                        if (errno == EEXIST) {
@@ -1291,7 +1292,8 @@ main(int argc, char *argv[])
 
                /* Start logging to syslog. */
                pjdlog_mode_set(PJDLOG_MODE_SYSLOG);
-
+       }
+       if (pidfile != NULL || !foreground) {
                /* Write PID to a file. */
                if (pidfile_write(pfh) == -1) {
                        pjdlog_errno(LOG_WARNING,
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to