/*
- * Copyright (c) 2008, 2009 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010 Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include "poll-loop.h"
#include "socket-util.h"
#include "util.h"
-
-#define THIS_MODULE VLM_process
#include "vlog.h"
+VLOG_DEFINE_THIS_MODULE(process)
+
struct process {
struct list node;
char *name;
static bool sigchld_is_blocked(void);
static void block_sigchld(sigset_t *);
static void unblock_sigchld(const sigset_t *);
-static void sigchld_handler(int signr UNUSED);
+static void sigchld_handler(int signr OVS_UNUSED);
static bool is_member(int x, const int *array, size_t);
/* Initializes the process subsystem (if it is not already initialized). Calls
if (argp != argv) {
ds_put_char(&ds, ' ');
}
- if (arg[strcspn(arg, " \t\r\n\v\\")]) {
+ if (arg[strcspn(arg, " \t\r\n\v\\\'\"")]) {
ds_put_char(&ds, '"');
for (p = arg; *p; p++) {
if (*p == '\\' || *p == '\"') {
}
block_sigchld(&oldsigs);
- fatal_signal_block();
pid = fork();
if (pid < 0) {
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
VLOG_WARN("fork failed: %s", strerror(errno));
return errno;
} else if (pid) {
/* Running in parent process. */
*pp = process_register(argv[0], pid);
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
return 0;
} else {
int fd;
fatal_signal_fork();
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
for (fd = 0; fd < fd_max; fd++) {
if (is_member(fd, null_fds, n_null_fds)) {
static void
stream_read(struct stream *s)
{
- int error = 0;
-
if (s->fds[0] < 0) {
return;
}
- error = 0;
for (;;) {
char buffer[512];
+ int error;
size_t n;
error = read_fully(s->fds[0], buffer, sizeof buffer, &n);
}
block_sigchld(&oldsigs);
- fatal_signal_block();
pid = fork();
if (pid < 0) {
int error = errno;
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
VLOG_WARN("fork failed: %s", strerror(error));
struct process *p;
p = process_register(argv[0], pid);
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
close(s_stdout.fds[1]);
int i;
fatal_signal_fork();
- fatal_signal_unblock();
unblock_sigchld(&oldsigs);
dup2(get_null_fd(), 0);
}
\f
static void
-sigchld_handler(int signr UNUSED)
+sigchld_handler(int signr OVS_UNUSED)
{
struct process *p;