[ovs-dev] [worker 05/12] daemon: Factor out code into new function fork_and_wait_for_startup().
Ethan Jackson
ethan at nicira.com
Wed Jun 13 20:15:23 UTC 2012
Looks good, thanks.
Ethan
On Tue, May 22, 2012 at 5:19 PM, Ben Pfaff <blp at nicira.com> wrote:
> This function will be useful in an upcoming commit.
>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
> lib/daemon.c | 33 +++++++++++++++++++++++++++------
> lib/daemon.h | 2 ++
> 2 files changed, 29 insertions(+), 6 deletions(-)
>
> diff --git a/lib/daemon.c b/lib/daemon.c
> index ecca606..a2eff07 100644
> --- a/lib/daemon.c
> +++ b/lib/daemon.c
> @@ -245,6 +245,32 @@ daemonize(void)
> daemonize_complete();
> }
>
> +/* Calls fork() and on success returns its return value. On failure, logs an
> + * error and exits unsuccessfully.
> + *
> + * Post-fork, but before returning, this function calls a few other functions
> + * that are generally useful if the child isn't planning to exec a new
> + * process. */
> +pid_t
> +fork_and_clean_up(void)
> +{
> + pid_t pid;
> +
> + pid = fork();
> + if (pid > 0) {
> + /* Running in parent process. */
> + fatal_signal_fork();
> + } else if (!pid) {
> + /* Running in child process. */
> + time_postfork();
> + lockfile_postfork();
> + } else {
> + VLOG_FATAL("fork failed (%s)", strerror(errno));
> + }
> +
> + return pid;
> +}
> +
> /* Forks, then:
> *
> * - In the parent, waits for the child to signal that it has completed its
> @@ -264,14 +290,13 @@ fork_and_wait_for_startup(int *fdp)
>
> xpipe(fds);
>
> - pid = fork();
> + pid = fork_and_clean_up();
> if (pid > 0) {
> /* Running in parent process. */
> size_t bytes_read;
> char c;
>
> close(fds[1]);
> - fatal_signal_fork();
> if (read_fully(fds[0], &c, 1, &bytes_read) != 0) {
> int retval;
> int status;
> @@ -301,11 +326,7 @@ fork_and_wait_for_startup(int *fdp)
> } else if (!pid) {
> /* Running in child process. */
> close(fds[0]);
> - time_postfork();
> - lockfile_postfork();
> *fdp = fds[1];
> - } else {
> - VLOG_FATAL("fork failed (%s)", strerror(errno));
> }
>
> return pid;
> diff --git a/lib/daemon.h b/lib/daemon.h
> index 8d52594..63b64b9 100644
> --- a/lib/daemon.h
> +++ b/lib/daemon.h
> @@ -73,4 +73,6 @@ void daemon_usage(void);
> pid_t read_pidfile(const char *name);
> pid_t read_pidfile_if_exists(const char *name);
>
> +pid_t fork_and_clean_up(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