Commit 9c63bcf5 authored by William A. Rowe Jr's avatar William A. Rowe Jr
Browse files

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

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
parent 5dea99d1
Loading
Loading
Loading
Loading
+4 −0
Changes for CHANGES: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
                                                         -*- 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>]
+20 −0
Changes for server/mpm/winnt/mpm_winnt.c: 20 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -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) {