]> 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:34:36 +0000 (17:34 +0000)
committerWilliam A. Rowe Jr <wrowe@apache.org>
Mon, 7 Jan 2008 17:34:36 +0000 (17:34 +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.2.x@609712 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
server/mpm/winnt/mpm_winnt.c

diff --git a/CHANGES b/CHANGES
index c03bc14567472c483f9d1f2edb50299469bc6914..34ea4157105d0b55daa5cd78693d1ed9b6ea7b4e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
-                                                         -*- coding: utf-8 -*-
+                                                         -*- coding: utf-8 -*-
 Changes with Apache 2.2.8
 
+  *) 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 f3174706ded24e97611c073ed78ca107cdf5489a..120adfc08984e922353cc5e630d2e45130c79d99 100644 (file)
@@ -1435,6 +1435,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) {