*
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.443.4.8 2006/07/16 18:17:35 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.443.4.9 2007/07/19 19:15:25 adunstan Exp $
  *
  * NOTES
  *
 
 bool           ClientAuthInProgress = false;           /* T during new-client
                                                                                                 * authentication */
+bool redirection_done = false; 
 
 /*
  * State for assigning random salts and cancel keys.
        InheritableSocket pgStatPipe0;
        InheritableSocket pgStatPipe1;
        pid_t PostmasterPid;
+       bool redirection_done;
 #ifdef WIN32
        HANDLE PostmasterHandle;
        HANDLE initial_signal_pipe;
 
        param->PostmasterPid = PostmasterPid;
 
+       param->redirection_done = redirection_done;
+
 #ifdef WIN32
        param->PostmasterHandle = PostmasterHandle;
        write_duplicated_handle(¶m->initial_signal_pipe,
 
        PostmasterPid = param->PostmasterPid;
 
+       redirection_done = param->redirection_done;
+
 #ifdef WIN32
        PostmasterHandle = param->PostmasterHandle;
        pgwin32_initial_signal_pipe = param->initial_signal_pipe;
 
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.12.4.2 2007/06/14 01:50:34 adunstan Exp $
+ *       $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.12.4.3 2007/07/19 19:15:25 adunstan Exp $
  *
  *-------------------------------------------------------------------------
  */
  */
 bool           am_syslogger = false;
 
+extern bool redirection_done;
+
 /*
  * Private state
  */
 static pg_time_t next_rotation_time;
-static bool redirection_done = false;
 static bool pipe_eof_seen = false;
 static FILE *syslogFile = NULL;
 static char *last_file_name = NULL;
                snprintf(numbuf[bufc++], 32, "%d", fileno(syslogFile));
        else
                strcpy(numbuf[bufc++], "-1");
-       snprintf(numbuf[bufc++], 32, "%d", (int) redirection_done);
 #else                                                  /* WIN32 */
        if (syslogFile != NULL)
                snprintf(numbuf[bufc++], 32, "%ld",
                                 _get_osfhandle(_fileno(syslogFile)));
        else
                strcpy(numbuf[bufc++], "0");
-       snprintf(numbuf[bufc++], 32, "%d", (int) redirection_done);
 #endif   /* WIN32 */
 
        /* Add to the arg list */
                syslogFile = fdopen(fd, "a");
                setvbuf(syslogFile, NULL, LBF_MODE, 0);
        }
-       redirection_done = (bool) atoi(*argv++);
 #else                                                  /* WIN32 */
        fd = atoi(*argv++);
        if (fd != 0)
                        setvbuf(syslogFile, NULL, LBF_MODE, 0);
                }
        }
-       redirection_done = (bool) atoi(*argv++);
 #endif   /* WIN32 */
 }
 #endif   /* EXEC_BACKEND */
 
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.155.4.5 2007/06/14 01:50:34 adunstan Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.155.4.6 2007/07/19 19:15:25 adunstan Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 sigjmp_buf *PG_exception_stack = NULL;
 
+extern bool redirection_done;
+
 /* GUC parameters */
 PGErrorVerbosity Log_error_verbosity = PGERROR_VERBOSE;
 char      *Log_line_prefix = NULL;             /* format for extra log line info */
                 * If stderr redirection is active, it's ok to write to stderr
                 * because that's really a pipe to the syslogger process.
                 */
-               if ((!Redirect_stderr || am_syslogger) && pgwin32_is_service())
+               if (pgwin32_is_service() && (!redirection_done || am_syslogger) )
                        write_eventlog(edata->elevel, buf.data);
                else
 #endif
-                       if (Redirect_stderr)
+                       if (redirection_done && !am_syslogger)
                                write_pipe_chunks(fileno(stderr), buf.data, buf.len);
                        else
                                write(fileno(stderr), buf.data, buf.len);