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

Ben Pfaff blp at nicira.com
Wed Jun 5 20:05:07 UTC 2013


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




More information about the dev mailing list