Commit 8e1a8fe2 authored by Heikki Linnakangas's avatar Heikki Linnakangas

Fix Windows-specific race condition in syslogger. This could've been

the cause of the "could not write to log file: Bad file descriptor"
errors reported at
http://archives.postgresql.org//pgsql-general/2008-06/msg00193.php

Backpatch to 8.3, the race condition was introduced by the CSV logging
patch.

Analysis and patch by Gurjeet Singh.
parent 029348cf
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.49 2009/02/24 12:09:09 petere Exp $ * $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.50 2009/03/18 08:44:49 heikki Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -907,13 +907,14 @@ write_syslogger_file(const char *buffer, int count, int destination) ...@@ -907,13 +907,14 @@ write_syslogger_file(const char *buffer, int count, int destination)
if (destination == LOG_DESTINATION_CSVLOG && csvlogFile == NULL) if (destination == LOG_DESTINATION_CSVLOG && csvlogFile == NULL)
open_csvlogfile(); open_csvlogfile();
logfile = destination == LOG_DESTINATION_CSVLOG ? csvlogFile : syslogFile; #ifdef WIN32
#ifndef WIN32
rc = fwrite(buffer, 1, count, logfile);
#else
EnterCriticalSection(&sysfileSection); EnterCriticalSection(&sysfileSection);
#endif
logfile = destination == LOG_DESTINATION_CSVLOG ? csvlogFile : syslogFile;
rc = fwrite(buffer, 1, count, logfile); rc = fwrite(buffer, 1, count, logfile);
#ifdef WIN32
LeaveCriticalSection(&sysfileSection); LeaveCriticalSection(&sysfileSection);
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment