diff options
-rw-r--r-- | CHANGES | 4 | ||||
-rw-r--r-- | threadproc/unix/proc.c | 9 |
2 files changed, 10 insertions, 3 deletions
@@ -1,6 +1,10 @@ -*- coding: utf-8 -*- Changes for APR 1.4.6 + *) apr_proc_create: Don't close any of the new stdin/stdout/stderr in the + child if it already has the correct FD. PR 51995. + [Dan Ports <drkp csail mit edu>] + *) Fix flag character '#' in combination with format character 'x' in apr snprintf implementations. [Rainer Jung] diff --git a/threadproc/unix/proc.c b/threadproc/unix/proc.c index b5e4dd47c..e5a3df9b4 100644 --- a/threadproc/unix/proc.c +++ b/threadproc/unix/proc.c @@ -432,7 +432,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); } @@ -440,7 +441,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); } @@ -448,7 +450,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); } |