diff options
author | Stefan Metzmacher <metze@samba.org> | 2010-01-07 13:47:46 +0100 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2010-01-12 12:20:15 +0100 |
commit | 1b0f9c3db7f545ecb0a9a9977cdda935a814dc37 (patch) | |
tree | 1180ae177d8f23e2a9a7280b350efde25b8c0fc6 /ctdb/server | |
parent | f34ba65d579887042451c257da78b613827649b7 (diff) | |
download | samba-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.c | 29 |
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; |