]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix Windows-specific race condition in syslogger. This could've been
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 18 Mar 2009 08:44:52 +0000 (08:44 +0000)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 18 Mar 2009 08:44:52 +0000 (08:44 +0000)
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.

src/backend/postmaster/syslogger.c

index aa5d34ef5b26faee36499121f6ca039beb615efb..39006466b2db66a850c40622b5aade920ddc9fff 100644 (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