aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2013-01-23 22:08:01 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2013-01-23 22:08:14 -0500
commit14ba9b11eab37f7cf44d41030eb2c0208795783d (patch)
tree3473368d044b554d9b16371edea9f60895fa4949 /src
parenta79ae0bc0d454b9f2c95a67c8eeff38c440abf99 (diff)
downloadpostgresql-14ba9b11eab37f7cf44d41030eb2c0208795783d.tar.gz
postgresql-14ba9b11eab37f7cf44d41030eb2c0208795783d.zip
Fix failure to rotate postmaster log file for size reasons on Windows.
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/postmaster/syslogger.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c
index 4fb9aacf6c2..48358c5b732 100644
--- a/src/backend/postmaster/syslogger.c
+++ b/src/backend/postmaster/syslogger.c
@@ -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);
}