]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
* core log.c: Work around possible solutions rejected by apr for
authorJim Jagielski <jim@apache.org>
Sat, 8 Dec 2007 13:59:22 +0000 (13:59 +0000)
committerJim Jagielski <jim@apache.org>
Sat, 8 Dec 2007 13:59:22 +0000 (13:59 +0000)
      the old implementation of apr_proc_create(), and explicitly pass
          the output and error channels to all log processes created.
              This goes all the way back to piped logs failing to run on win32.
                  Not in or needed at trunk/, as apr 1.3.0 has the proper fix.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@602467 13f79535-47bb-0310-9956-ffa450edef68

STATUS
server/log.c

diff --git a/STATUS b/STATUS
index d395880f72664cdf70de257bbb5ffa7793297779..54f8821ffe8286e311a25c2ed61a5c88f3282256 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -79,14 +79,6 @@ RELEASE SHOWSTOPPERS:
 PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
   [ start all new proposals below, under PATCHES PROPOSED. ]
 
-  * core log.c: Work around possible solutions rejected by apr for
-    the old implementation of apr_proc_create(), and explicitly pass
-    the output and error channels to all log processes created.
-    This goes all the way back to piped logs failing to run on win32.
-    Not in or needed at trunk/, as apr 1.3.0 has the proper fix.
-      http://people.apache.org/~wrowe/httpd-2.0-2.2-procattr-bugfix-log.c.patch
-    +1: wrowe, rpluem, jim
-
   * mod_proxy_http: Correctly forward unexpected interim (HTTP 1xx) responses
     incorporating ap_send_interim_response core API
     PR 16518
index aa840abfd90c197d2330220e5e24c46152d77c8f..e0c3cef42bfa6ad7c52c64928f81d766cd6ef8eb 100644 (file)
@@ -263,7 +263,7 @@ static int log_child(apr_pool_t *p, const char *progname,
     apr_status_t rc;
     apr_procattr_t *procattr;
     apr_proc_t *procnew;
-    apr_file_t *errfile;
+    apr_file_t *outfile, *errfile;
 
     if (((rc = apr_procattr_create(&procattr, p)) == APR_SUCCESS)
         && ((rc = apr_procattr_cmdtype_set(procattr,
@@ -282,8 +282,11 @@ static int log_child(apr_pool_t *p, const char *progname,
         pname = apr_pstrdup(p, args[0]);
         procnew = (apr_proc_t *)apr_pcalloc(p, sizeof(*procnew));
 
-        if (dummy_stderr) {
-            if ((rc = apr_file_open_stdout(&errfile, p)) == APR_SUCCESS)
+        if ((rc = apr_file_open_stdout(&outfile, p)) == APR_SUCCESS) {
+            rc = apr_procattr_child_out_set(procattr, outfile, NULL);
+            if (dummy_stderr)
+                rc = apr_procattr_child_err_set(procattr, outfile, NULL);
+            else if ((rc = apr_file_open_stderr(&errfile, p)) == APR_SUCCESS)
                 rc = apr_procattr_child_err_set(procattr, errfile, NULL);
         }
 
@@ -887,6 +890,12 @@ static apr_status_t piped_log_spawn(piped_log *pl)
     else {
         char **args;
         const char *pname;
+        apr_file_t *outfile, *errfile;
+
+        if ((status = apr_file_open_stdout(&outfile, pl->p)) == APR_SUCCESS)
+            status = apr_procattr_child_out_set(procattr, outfile, NULL);
+        if ((status = apr_file_open_stderr(&errfile, pl->p)) == APR_SUCCESS)
+            status = apr_procattr_child_err_set(procattr, errfile, NULL);
 
         apr_tokenize_to_argv(pl->program, &args, pl->p);
         pname = apr_pstrdup(pl->p, args[0]);