Fix failure to rotate postmaster log file for size reasons on Windows.
authorTom Lane
Thu, 24 Jan 2013 03:08:01 +0000 (22:08 -0500)
committerTom Lane
Thu, 24 Jan 2013 03:08:14 +0000 (22:08 -0500)
When we eliminated "unnecessary" wakeups of the syslogger process, we
broke size-based logfile rotation on Windows, because on that platform
data transfer is done in a separate thread.  While non-Windows platforms
would recheck the output file size after every log message, Windows only
did so when the control thread woke up for some other reason, which might
be quite infrequent.  Per bug #7814 from Tsunezumi.  Back-patch to 9.2
where the problem was introduced.

Jeff Janes

src/backend/postmaster/syslogger.c

index 4fb9aacf6c24f1daa53097ddd803ad56f8c17601..48358c5b7325ff16416daac035463e8997c8dcd4 100644 (file)
@@ -1058,6 +1058,15 @@ pipeThread(void *arg)
            bytes_in_logbuffer += bytesRead;
            process_pipe_input(logbuffer, &bytes_in_logbuffer);
        }
+
+       /*
+        * If we've filled the current logfile, nudge the main thread to do a
+        * log rotation.
+        */
+       if (Log_RotationSize > 0 &&
+           ftell(syslogFile) >= Log_RotationSize * 1024L)
+           SetLatch(&sysLoggerLatch);
+
        LeaveCriticalSection(&sysloggerSection);
    }