You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@apache.org on 2007/12/28 18:57:56 UTC
svn commit: r607302 -
/httpd/httpd/branches/2.0.x/server/mpm/winnt/nt_eventlog.c
Author: wrowe
Date: Fri Dec 28 09:57:55 2007
New Revision: 607302
URL: http://svn.apache.org/viewvc?rev=607302&view=rev
Log:
Correct the approach to std file handles by simplifying the approach
and taking better advantage of apr's now-proper support.
Already verified by Randy Kobes and Tom Donovan
Sync to trunk r580433
Modified:
httpd/httpd/branches/2.0.x/server/mpm/winnt/nt_eventlog.c
Modified: httpd/httpd/branches/2.0.x/server/mpm/winnt/nt_eventlog.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.0.x/server/mpm/winnt/nt_eventlog.c?rev=607302&r1=607301&r2=607302&view=diff
==============================================================================
--- httpd/httpd/branches/2.0.x/server/mpm/winnt/nt_eventlog.c (original)
+++ httpd/httpd/branches/2.0.x/server/mpm/winnt/nt_eventlog.c Fri Dec 28 09:57:55 2007
@@ -21,6 +21,7 @@
#include "mpm_winnt.h"
#include "apr_strings.h"
#include "apr_lib.h"
+#include "apr_portable.h"
#include "ap_regkey.h"
static char *display_name = NULL;
@@ -138,7 +139,8 @@
HANDLE hPipeWrite = NULL;
HANDLE hDup = NULL;
DWORD threadid;
- int fd;
+ apr_file_t *eventlog_file;
+ apr_file_t *stderr_file;
display_name = argv0;
@@ -159,27 +161,11 @@
WaitForSingleObject(stderr_ready, INFINITE);
- /* Flush stderr and unset its buffer, then commit and replace stderr.
- * This is typically a noop for Win2K/XP since services with NULL std
- * handles [but valid FILE *'s, oddly enough], but is required
- * for NT 4.0 and to use this code outside of services.
- */
- fflush(stderr);
- setvbuf(stderr, NULL, _IONBF, 0);
- _commit(2 /* stderr */);
- fd = _open_osfhandle((long) hPipeWrite,
- _O_WRONLY | _O_BINARY);
- _dup2(fd, 2);
- _close(fd);
- _setmode(2, _O_BINARY);
-
- /* hPipeWrite was _close()'ed above, and _dup2()'ed
- * to fd 2 creating a new, inherited Win32 handle.
- * Recover that real handle from fd 2.
- */
- hPipeWrite = (HANDLE)_get_osfhandle(2);
-
- SetStdHandle(STD_ERROR_HANDLE, hPipeWrite);
+ if ((apr_file_open_stderr(&stderr_file, p)
+ == APR_SUCCESS)
+ && (apr_os_file_put(&eventlog_file, &hPipeWrite, APR_WRITE, p)
+ == APR_SUCCESS))
+ apr_file_dup2(stderr_file, eventlog_file, p);
/* The code above _will_ corrupt the StdHandle...
* and we must do so anyways. We set this up only