[ovs-dev] [worker 06/12] daemon: Factor out code into new function daemonize_post_detach().

Ethan Jackson ethan at nicira.com
Wed Jun 13 20:17:59 UTC 2012


Looks good, thanks.

Ethan

On Tue, May 22, 2012 at 5:19 PM, Ben Pfaff <blp at nicira.com> wrote:
> This code will have another user in an upcoming commit.
>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
>  lib/daemon.c |   27 ++++++++++++++++++++++-----
>  lib/daemon.h |    1 +
>  2 files changed, 23 insertions(+), 5 deletions(-)
>
> diff --git a/lib/daemon.c b/lib/daemon.c
> index a2eff07..84ed614 100644
> --- a/lib/daemon.c
> +++ b/lib/daemon.c
> @@ -39,7 +39,8 @@
>  VLOG_DEFINE_THIS_MODULE(daemon);
>
>  /* --detach: Should we run in the background? */
> -static bool detach;
> +static bool detach;             /* Was --detach specified? */
> +static bool detached;           /* Have we already detached? */
>
>  /* --pidfile: Name of pidfile (null if none). */
>  static char *pidfile;
> @@ -513,22 +514,38 @@ daemonize_start(void)
>  }
>
>  /* If daemonization is configured, then this function notifies the parent
> - * process that the child process has completed startup successfully.
> + * process that the child process has completed startup successfully.  It also
> + * call daemonize_post_detach().
>  *
>  * Calling this function more than once has no additional effect. */
>  void
>  daemonize_complete(void)
>  {
> -    fork_notify_startup(daemonize_fd);
> -    daemonize_fd = -1;
> +    if (!detached) {
> +        detached = true;
> +
> +        fork_notify_startup(daemonize_fd);
> +        daemonize_fd = -1;
> +        daemonize_post_detach();
> +    }
> +}
>
> +/* If daemonization is configured, then this function does traditional Unix
> + * daemonization behavior: join a new session, chdir to the root (if not
> + * disabled), and close the standard file descriptors.
> + *
> + * It only makes sense to call this function as part of an implementation of a
> + * special daemon subprocess.  A normal daemon should just call
> + * daemonize_complete(). */
> +void
> +daemonize_post_detach(void)
> +{
>     if (detach) {
>         setsid();
>         if (chdir_) {
>             ignore(chdir("/"));
>         }
>         close_standard_fds();
> -        detach = false;
>     }
>  }
>
> diff --git a/lib/daemon.h b/lib/daemon.h
> index 63b64b9..8cbcfaf 100644
> --- a/lib/daemon.h
> +++ b/lib/daemon.h
> @@ -74,5 +74,6 @@ pid_t read_pidfile(const char *name);
>  pid_t read_pidfile_if_exists(const char *name);
>
>  pid_t fork_and_clean_up(void);
> +void daemonize_post_detach(void);
>
>  #endif /* daemon.h */
> --
> 1.7.2.5
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list