diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c
index 87951a6961c2267c91de54a51aa0709982553914..d019127c790b17e9b9e586bf3b4331e13b8f1fc3 100644
--- a/src/backend/postmaster/syslogger.c
+++ b/src/backend/postmaster/syslogger.c
@@ -18,7 +18,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.13 2005/03/10 07:14:03 neilc Exp $
+ *	  $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.14 2005/03/12 01:54:44 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -679,10 +679,9 @@ write_syslogger_file_binary(const char *buffer, int count)
 	LeaveCriticalSection(&sysfileSection);
 #endif
 
+	/* can't use ereport here because of possible recursion */
 	if (rc != count)
-		ereport(LOG,
-				(errcode_for_file_access(),
-				 errmsg("could not write to log file: %m")));
+		write_stderr("could not write to log file: %s\n", strerror(errno));
 }
 
 #ifdef WIN32
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 80b222913ecff68cb89f0b4a7b35fcf95b4e1402..5dd564ef28167147dbb7fd454b38265f4bd3769a 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.157 2005/02/27 01:02:57 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.158 2005/03/12 01:54:44 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1557,7 +1557,6 @@ send_message_to_server_log(ErrorData *edata)
 		appendStringInfoChar(&buf, '\n');
 	}
 
-
 #ifdef HAVE_SYSLOG
 	/* Write to syslog, if enabled */
 	if (Log_destination & LOG_DESTINATION_SYSLOG)
@@ -1597,7 +1596,9 @@ send_message_to_server_log(ErrorData *edata)
 		write_syslog(syslog_level, buf.data);
 	}
 #endif   /* HAVE_SYSLOG */
+
 #ifdef WIN32
+	/* Write to eventlog, if enabled */
 	if (Log_destination & LOG_DESTINATION_EVENTLOG)
 	{
 		int			eventlog_level;
@@ -1628,19 +1629,23 @@ send_message_to_server_log(ErrorData *edata)
 		write_eventlog(eventlog_level, buf.data);
 	}
 #endif   /* WIN32 */
+
 	/* Write to stderr, if enabled */
 	if ((Log_destination & LOG_DESTINATION_STDERR) || whereToSendOutput == Debug)
 	{
 #ifdef WIN32
-		/* In a win32 service environment, there is no usable stderr. Capture
-		   anything going there and write it to the eventlog instead.
-		   If stderr redirection is active, leave it to stderr because the
-		   logger will capture it to a file. */
+		/*
+		 * In a win32 service environment, there is no usable stderr. Capture
+		 * 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.
+		 */
 		if ((!Redirect_stderr || am_syslogger) && pgwin32_is_service())
 			write_eventlog(EVENTLOG_ERROR_TYPE, buf.data);
 		else
 #endif
-		fprintf(stderr, "%s", buf.data);
+			fprintf(stderr, "%s", buf.data);
 	}
 
 	/* If in the syslogger process, try to write messages direct to file */