summaryrefslogtreecommitdiff
path: root/threadproc
diff options
context:
space:
mode:
authorStefan Fritsch <sf@apache.org>2011-10-15 20:47:15 +0000
committerStefan Fritsch <sf@apache.org>2011-10-15 20:47:15 +0000
commited643da7e795db7b5ca8d3dd69452d2f2b88e25e (patch)
tree9983c686d4674725cd2f540de3e3e7c809261716 /threadproc
parenta5d10db7071d3e9f3bf6a6af6378dbefcc7f33af (diff)
downloadapr-ed643da7e795db7b5ca8d3dd69452d2f2b88e25e.tar.gz
Don't close any of the new stdin/stdout/stderr FDs in the child if it
already has the correct FD. PR: 51995 Submitted by: Dan Ports <drkp csail mit edu>] git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1183685 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'threadproc')
-rw-r--r--threadproc/unix/proc.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/threadproc/unix/proc.c b/threadproc/unix/proc.c
index 593eb5ad1..8ded39177 100644
--- a/threadproc/unix/proc.c
+++ b/threadproc/unix/proc.c
@@ -431,7 +431,8 @@ APR_DECLARE(apr_status_t) apr_proc_create(apr_proc_t *new,
if ((attr->child_in) && (attr->child_in->filedes == -1)) {
close(STDIN_FILENO);
}
- else if (attr->child_in) {
+ else if (attr->child_in &&
+ attr->child_in->filedes != STDIN_FILENO) {
dup2(attr->child_in->filedes, STDIN_FILENO);
apr_file_close(attr->child_in);
}
@@ -439,7 +440,8 @@ APR_DECLARE(apr_status_t) apr_proc_create(apr_proc_t *new,
if ((attr->child_out) && (attr->child_out->filedes == -1)) {
close(STDOUT_FILENO);
}
- else if (attr->child_out) {
+ else if (attr->child_out &&
+ attr->child_out->filedes != STDOUT_FILENO) {
dup2(attr->child_out->filedes, STDOUT_FILENO);
apr_file_close(attr->child_out);
}
@@ -447,7 +449,8 @@ APR_DECLARE(apr_status_t) apr_proc_create(apr_proc_t *new,
if ((attr->child_err) && (attr->child_err->filedes == -1)) {
close(STDERR_FILENO);
}
- else if (attr->child_err) {
+ else if (attr->child_err &&
+ attr->child_err->filedes != STDERR_FILENO) {
dup2(attr->child_err->filedes, STDERR_FILENO);
apr_file_close(attr->child_err);
}