]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
winnt_mpm: Resolve modperl issues by redirecting console mode stdout
authorWilliam A. Rowe Jr <wrowe@apache.org>
Mon, 7 Jan 2008 17:36:25 +0000 (17:36 +0000)
committerWilliam A. Rowe Jr <wrowe@apache.org>
Mon, 7 Jan 2008 17:36:25 +0000 (17:36 +0000)
to /Device/Nul as the server is starting up, mirroring unix MPM's.

PR: 43534

Submitted by: Tom Donovan <Tom.Donovan acm.org> and William Rowe

Backports: r609354, r609366

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

CHANGES
server/mpm/winnt/mpm_winnt.c

diff --git a/CHANGES b/CHANGES
index d21fbf16f8274dfa02f62f8b2145cf1ef3dadb61..46751b49dfc687eb11455f3acdaac7960c029a6d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.0.63
 
+  *) winnt_mpm: Resolve modperl issues by redirecting console mode stdout
+     to /Device/Nul as the server is starting up, mirroring unix MPM's.
+     PR: 43534  [Tom Donovan <Tom.Donovan acm.org>, William Rowe]
+
   *) winnt_mpm: Restore Win32DisableAcceptEx On directive and Win9x platform
      by recreating the bucket allocator each time the trans pool is cleared.
      PR: 11427 #16 (follow-on)  [Tom Donovan <Tom.Donovan acm.org>]
index 2c9dbbe89019d729e10e8e91b9e4e325a734b8a2..4f58fa2fdb4ae8c7eece0e85130b02348a70d71c 100644 (file)
@@ -1405,6 +1405,26 @@ static int winnt_pre_config(apr_pool_t *pconf_, apr_pool_t *plog, apr_pool_t *pt
                      service_name);
         exit(APEXIT_INIT);
     }
+    else if (!one_process && !ap_my_generation) {
+        /* Open a null handle to soak stdout in this process.
+         * We need to emulate apr_proc_detach, unix performs this
+         * same check in the pre_config hook (although it is
+         * arguably premature).  Services already fixed this.
+         */
+        apr_file_t *nullfile;
+        apr_status_t rv;
+        apr_pool_t *pproc = apr_pool_parent_get(pconf);
+
+        if ((rv = apr_file_open(&nullfile, "NUL",
+                                APR_READ | APR_WRITE, APR_OS_DEFAULT,
+                                pproc)) == APR_SUCCESS) {
+            apr_file_t *nullstdout;
+            if (apr_file_open_stdout(&nullstdout, pproc)
+                    == APR_SUCCESS)
+                apr_file_dup2(nullstdout, nullfile, pproc);
+            apr_file_close(nullfile);
+        }
+    }
 
     /* Win9x: disable AcceptEx */
     if (osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {