summaryrefslogtreecommitdiffstats
path: root/ctdb/server
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2010-01-07 13:47:46 +0100
committerStefan Metzmacher <metze@samba.org>2010-01-12 12:20:15 +0100
commit1b0f9c3db7f545ecb0a9a9977cdda935a814dc37 (patch)
tree1180ae177d8f23e2a9a7280b350efde25b8c0fc6 /ctdb/server
parentf34ba65d579887042451c257da78b613827649b7 (diff)
downloadsamba-1b0f9c3db7f545ecb0a9a9977cdda935a814dc37.tar.gz
samba-1b0f9c3db7f545ecb0a9a9977cdda935a814dc37.tar.xz
samba-1b0f9c3db7f545ecb0a9a9977cdda935a814dc37.zip
ctdb_logging: simplify ctdb_fork_with_logging a lot and reduce the syscall usage
metze (This used to be ctdb commit acb98c36a3d56fa6b34747015b913ada3eaa133f)
Diffstat (limited to 'ctdb/server')
-rw-r--r--ctdb/server/ctdb_logging.c29
1 files changed, 6 insertions, 23 deletions
diff --git a/ctdb/server/ctdb_logging.c b/ctdb/server/ctdb_logging.c
index 22baea4658..9d09aa2470 100644
--- a/ctdb/server/ctdb_logging.c
+++ b/ctdb/server/ctdb_logging.c
@@ -433,8 +433,6 @@ struct ctdb_log_state *ctdb_fork_with_logging(TALLOC_CTX *mem_ctx,
void *logfn_private, pid_t *pid)
{
int p[2];
- int old_stdout, old_stderr;
- int saved_errno;
struct ctdb_log_state *log;
log = talloc_zero(mem_ctx, struct ctdb_log_state);
@@ -448,36 +446,24 @@ struct ctdb_log_state *ctdb_fork_with_logging(TALLOC_CTX *mem_ctx,
goto free_log;
}
- /* We'll fail if stderr/stdout not already open; it's simpler. */
- old_stdout = dup(STDOUT_FILENO);
- old_stderr = dup(STDERR_FILENO);
- if (dup2(p[1], STDOUT_FILENO) < 0 || dup2(p[1], STDERR_FILENO) < 0) {
- DEBUG(DEBUG_ERR,(__location__ " Failed to setup output for child\n"));
- goto close_pipe;
- }
- close(p[1]);
-
*pid = fork();
/* Child? */
if (*pid == 0) {
- close(old_stdout);
- close(old_stderr);
+ close(STDOUT_FILENO);
+ close(STDERR_FILENO);
+ dup2(p[1], STDOUT_FILENO);
+ dup2(p[1], STDERR_FILENO);
close(p[0]);
+ close(p[1]);
return log;
}
-
- saved_errno = errno;
- dup2(STDOUT_FILENO, old_stdout);
- dup2(STDERR_FILENO, old_stderr);
- close(old_stdout);
- close(old_stderr);
+ close(p[1]);
/* We failed? */
if (*pid < 0) {
DEBUG(DEBUG_ERR, (__location__ " fork failed for child process\n"));
close(p[0]);
- errno = saved_errno;
goto free_log;
}
@@ -489,9 +475,6 @@ struct ctdb_log_state *ctdb_fork_with_logging(TALLOC_CTX *mem_ctx,
ctdb_log_handler, log);
return log;
-close_pipe:
- close(p[0]);
- close(p[1]);
free_log:
talloc_free(log);
return NULL;