[ovs-dev] [threads 02/17] process: Remove process_run(), process_run_capture(), and related code.

Ben Pfaff blp at nicira.com
Mon Jun 10 20:52:35 UTC 2013


Thanks Ansis and Alex, I applied this to master.

On Mon, Jun 10, 2013 at 11:13:50AM -0700, Ansis Atteka wrote:
> Acked-by: Ansis Atteka <aatteka at nicira.com>
> 
> 
> On Wed, Jun 5, 2013 at 1:05 PM, Ben Pfaff <blp at nicira.com> wrote:
> 
> > They are unused.
> >
> > Signed-off-by: Ben Pfaff <blp at nicira.com>
> > ---
> >  lib/process.c |  227
> > ---------------------------------------------------------
> >  lib/process.h |    8 --
> >  2 files changed, 0 insertions(+), 235 deletions(-)
> >
> > diff --git a/lib/process.c b/lib/process.c
> > index 0aa1842..ccba97a 100644
> > --- a/lib/process.c
> > +++ b/lib/process.c
> > @@ -36,8 +36,6 @@
> >
> >  VLOG_DEFINE_THIS_MODULE(process);
> >
> > -COVERAGE_DEFINE(process_run);
> > -COVERAGE_DEFINE(process_run_capture);
> >  COVERAGE_DEFINE(process_sigchld);
> >  COVERAGE_DEFINE(process_start);
> >
> > @@ -311,32 +309,6 @@ process_status(const struct process *p)
> >      return p->status;
> >  }
> >
> > -int
> > -process_run(char **argv,
> > -            const int keep_fds[], size_t n_keep_fds,
> > -            const int null_fds[], size_t n_null_fds,
> > -            int *status)
> > -{
> > -    struct process *p;
> > -    int retval;
> > -
> > -    COVERAGE_INC(process_run);
> > -    retval = process_start(argv, keep_fds, n_keep_fds, null_fds,
> > n_null_fds,
> > -                           &p);
> > -    if (retval) {
> > -        *status = 0;
> > -        return retval;
> > -    }
> > -
> > -    while (!process_exited(p)) {
> > -        process_wait(p);
> > -        poll_block();
> > -    }
> > -    *status = process_status(p);
> > -    process_destroy(p);
> > -    return 0;
> > -}
> > -
> >  /* Given 'status', which is a process status in the form reported by
> > waitpid(2)
> >   * and returned by process_status(), returns a string describing how the
> >   * process terminated.  The caller is responsible for freeing the string
> > when
> > @@ -403,205 +375,6 @@ process_search_path(const char *name)
> >      return NULL;
> >  }
> >
> > -/* process_run_capture() and supporting functions. */
> > -
> > -struct stream {
> > -    size_t max_size;
> > -    struct ds log;
> > -    int fds[2];
> > -};
> > -
> > -static int
> > -stream_open(struct stream *s, size_t max_size)
> > -{
> > -    int error;
> > -
> > -    s->max_size = max_size;
> > -    ds_init(&s->log);
> > -    if (pipe(s->fds)) {
> > -        VLOG_WARN("failed to create pipe: %s", strerror(errno));
> > -        return errno;
> > -    }
> > -    error = set_nonblocking(s->fds[0]);
> > -    if (error) {
> > -        close(s->fds[0]);
> > -        close(s->fds[1]);
> > -    }
> > -    return error;
> > -}
> > -
> > -static void
> > -stream_read(struct stream *s)
> > -{
> > -    if (s->fds[0] < 0) {
> > -        return;
> > -    }
> > -
> > -    for (;;) {
> > -        char buffer[512];
> > -        int error;
> > -        size_t n;
> > -
> > -        error = read_fully(s->fds[0], buffer, sizeof buffer, &n);
> > -        ds_put_buffer(&s->log, buffer, n);
> > -        if (error) {
> > -            if (error == EAGAIN || error == EWOULDBLOCK) {
> > -                return;
> > -            } else {
> > -                if (error != EOF) {
> > -                    VLOG_WARN("error reading subprocess pipe: %s",
> > -                              strerror(error));
> > -                }
> > -                break;
> > -            }
> > -        } else if (s->log.length > s->max_size) {
> > -            VLOG_WARN("subprocess output overflowed %zu-byte buffer",
> > -                      s->max_size);
> > -            break;
> > -        }
> > -    }
> > -    close(s->fds[0]);
> > -    s->fds[0] = -1;
> > -}
> > -
> > -static void
> > -stream_wait(struct stream *s)
> > -{
> > -    if (s->fds[0] >= 0) {
> > -        poll_fd_wait(s->fds[0], POLLIN);
> > -    }
> > -}
> > -
> > -static void
> > -stream_close(struct stream *s)
> > -{
> > -    ds_destroy(&s->log);
> > -    if (s->fds[0] >= 0) {
> > -        close(s->fds[0]);
> > -    }
> > -    if (s->fds[1] >= 0) {
> > -        close(s->fds[1]);
> > -    }
> > -}
> > -
> > -/* Starts the process whose arguments are given in the null-terminated
> > array
> > - * 'argv' and waits for it to exit.  On success returns 0 and stores the
> > - * process exit value (suitable for passing to process_status_msg()) in
> > - * '*status'.  On failure, returns a positive errno value and stores 0 in
> > - * '*status'.
> > - *
> > - * If 'stdout_log' is nonnull, then the subprocess's output to stdout (up
> > to a
> > - * limit of 'log_max' bytes) is captured in a memory buffer, which
> > - * when this function returns 0 is stored as a null-terminated string in
> > - * '*stdout_log'.  The caller is responsible for freeing '*stdout_log' (by
> > - * passing it to free()).  When this function returns an error,
> > '*stdout_log'
> > - * is set to NULL.
> > - *
> > - * If 'stderr_log' is nonnull, then it is treated like 'stdout_log' except
> > - * that it captures the subprocess's output to stderr. */
> > -int
> > -process_run_capture(char **argv, char **stdout_log, char **stderr_log,
> > -                    size_t max_log, int *status)
> > -{
> > -    struct stream s_stdout, s_stderr;
> > -    sigset_t oldsigs;
> > -    pid_t pid;
> > -    int error;
> > -
> > -    COVERAGE_INC(process_run_capture);
> > -    if (stdout_log) {
> > -        *stdout_log = NULL;
> > -    }
> > -    if (stderr_log) {
> > -        *stderr_log = NULL;
> > -    }
> > -    *status = 0;
> > -    error = process_prestart(argv);
> > -    if (error) {
> > -        return error;
> > -    }
> > -
> > -    error = stream_open(&s_stdout, max_log);
> > -    if (error) {
> > -        return error;
> > -    }
> > -
> > -    error = stream_open(&s_stderr, max_log);
> > -    if (error) {
> > -        stream_close(&s_stdout);
> > -        return error;
> > -    }
> > -
> > -    block_sigchld(&oldsigs);
> > -    pid = fork();
> > -    if (pid < 0) {
> > -        error = errno;
> > -
> > -        unblock_sigchld(&oldsigs);
> > -        VLOG_WARN("fork failed: %s", strerror(error));
> > -
> > -        stream_close(&s_stdout);
> > -        stream_close(&s_stderr);
> > -        *status = 0;
> > -        return error;
> > -    } else if (pid) {
> > -        /* Running in parent process. */
> > -        struct process *p;
> > -
> > -        p = process_register(argv[0], pid);
> > -        unblock_sigchld(&oldsigs);
> > -
> > -        close(s_stdout.fds[1]);
> > -        close(s_stderr.fds[1]);
> > -        while (!process_exited(p)) {
> > -            stream_read(&s_stdout);
> > -            stream_read(&s_stderr);
> > -
> > -            stream_wait(&s_stdout);
> > -            stream_wait(&s_stderr);
> > -            process_wait(p);
> > -            poll_block();
> > -        }
> > -        stream_read(&s_stdout);
> > -        stream_read(&s_stderr);
> > -
> > -        if (stdout_log) {
> > -            *stdout_log = ds_steal_cstr(&s_stdout.log);
> > -        }
> > -        if (stderr_log) {
> > -            *stderr_log = ds_steal_cstr(&s_stderr.log);
> > -        }
> > -
> > -        stream_close(&s_stdout);
> > -        stream_close(&s_stderr);
> > -
> > -        *status = process_status(p);
> > -        process_destroy(p);
> > -        return 0;
> > -    } else {
> > -        /* Running in child process. */
> > -        int max_fds;
> > -        int i;
> > -
> > -        fatal_signal_fork();
> > -        unblock_sigchld(&oldsigs);
> > -
> > -        dup2(get_null_fd(), 0);
> > -        dup2(s_stdout.fds[1], 1);
> > -        dup2(s_stderr.fds[1], 2);
> > -
> > -        max_fds = get_max_fds();
> > -        for (i = 3; i < max_fds; i++) {
> > -            close(i);
> > -        }
> > -
> > -        execvp(argv[0], argv);
> > -        fprintf(stderr, "execvp(\"%s\") failed: %s\n",
> > -                argv[0], strerror(errno));
> > -        exit(EXIT_FAILURE);
> > -    }
> > -}
> > -
> >  static void
> >  sigchld_handler(int signr OVS_UNUSED)
> >  {
> > diff --git a/lib/process.h b/lib/process.h
> > index d40c1ac..45e2a00 100644
> > --- a/lib/process.h
> > +++ b/lib/process.h
> > @@ -30,11 +30,6 @@ int process_start(char **argv,
> >  void process_destroy(struct process *);
> >  int process_kill(const struct process *, int signr);
> >
> > -int process_run(char **argv,
> > -                const int *keep_fds, size_t n_keep_fds,
> > -                const int *null_fds, size_t n_null_fds,
> > -                int *status);
> > -
> >  pid_t process_pid(const struct process *);
> >  const char *process_name(const struct process *);
> >  bool process_exited(struct process *);
> > @@ -45,7 +40,4 @@ void process_wait(struct process *);
> >
> >  char *process_search_path(const char *);
> >
> > -int process_run_capture(char **argv, char **stdout_log, char **stderr_log,
> > -                        size_t max_log, int *status);
> > -
> >  #endif /* process.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