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.
This commit is contained in:
Heikki Linnakangas 2009-03-18 08:44:52 +00:00
parent 6cc0e006ee
commit 06ce04ab18

View File

@ -18,7 +18,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.44 2008/01/25 20:42:10 tgl Exp $
* $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.44.2.1 2009/03/18 08:44:52 heikki Exp $
*
*-------------------------------------------------------------------------
*/
@ -909,13 +909,14 @@ write_syslogger_file(const char *buffer, int count, int destination)
if (destination == LOG_DESTINATION_CSVLOG && csvlogFile == NULL)
open_csvlogfile();
logfile = destination == LOG_DESTINATION_CSVLOG ? csvlogFile : syslogFile;
#ifndef WIN32
rc = fwrite(buffer, 1, count, logfile);
#else
#ifdef WIN32
EnterCriticalSection(&sysfileSection);
#endif
logfile = destination == LOG_DESTINATION_CSVLOG ? csvlogFile : syslogFile;
rc = fwrite(buffer, 1, count, logfile);
#ifdef WIN32
LeaveCriticalSection(&sysfileSection);
#endif