From: Jim Jagielski Date: Sat, 8 Dec 2007 13:59:22 +0000 (+0000) Subject: * core log.c: Work around possible solutions rejected by apr for X-Git-Tag: 2.2.7~145 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5f48b3e775ca0cb30e604dcb742acae7fefccc80;p=thirdparty%2Fapache%2Fhttpd.git * 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. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@602467 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/STATUS b/STATUS index d395880f726..54f8821ffe8 100644 --- 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 diff --git a/server/log.c b/server/log.c index aa840abfd90..e0c3cef42bf 100644 --- a/server/log.c +++ b/server/log.c @@ -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]);