From 9c6cfdc239a76a76aaaa23ec8c5887510f273350 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Sun, 11 Feb 2007 15:12:21 +0000 Subject: [PATCH] Fix for early log messages during postmaster startup getting lost when running as a service on Win32. Per report from Harald Armin Massa. Backpatch to 8.2. --- src/backend/postmaster/postmaster.c | 6 +++--- src/backend/utils/error/elog.c | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 809dfdebb5c..9672c3bc06d 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -37,7 +37,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.505.2.2 2007/02/08 17:04:48 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.505.2.3 2007/02/11 15:12:21 mha Exp $ * * NOTES * @@ -202,8 +202,8 @@ static pid_t StartupPID = 0, BgWriterPID = 0, AutoVacPID = 0, PgArchPID = 0, - PgStatPID = 0, - SysLoggerPID = 0; + PgStatPID = 0; +pid_t SysLoggerPID = 0; /* Needs to be accessed from elog.c */ /* Startup/shutdown state */ #define NoShutdown 0 diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index fe6dfb93a86..18717e79e83 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -42,7 +42,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.178 2006/11/28 12:54:42 petere Exp $ + * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.178.2.1 2007/02/11 15:12:21 mha Exp $ * *------------------------------------------------------------------------- */ @@ -76,6 +76,8 @@ ErrorContextCallback *error_context_stack = NULL; sigjmp_buf *PG_exception_stack = NULL; +extern pid_t SysLoggerPID; + /* GUC parameters */ PGErrorVerbosity Log_error_verbosity = PGERROR_VERBOSE; char *Log_line_prefix = NULL; /* format for extra log line info */ @@ -1715,9 +1717,10 @@ send_message_to_server_log(ErrorData *edata) * anything going there and write it to the eventlog instead. * * If stderr redirection is active, it's ok to write to stderr because - * that's really a pipe to the syslogger process. + * that's really a pipe to the syslogger process. Unless we're in the + * postmaster, and the syslogger process isn't started yet. */ - if ((!Redirect_stderr || am_syslogger) && pgwin32_is_service()) + if ((!Redirect_stderr || am_syslogger || (!IsUnderPostmaster && SysLoggerPID==0)) && pgwin32_is_service()) write_eventlog(edata->elevel, buf.data); else #endif