[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