Commit 8c873bbf authored by Magnus Hagander's avatar Magnus Hagander

Make the walwriter close it's handle to an old xlog segment if it's no longer

the current one. Not doing this would leave the walwriter with a handle to a
deleted file if there was nothing for it to do for a long period of time,
preventing the file from  being completely removed.

Reported by Tollef Fog Heen, and thanks to Heikki for some hand-holding with
the patch.
parent 5a41c317
......@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.417 2010/06/03 21:02:11 petere Exp $
* $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.418 2010/06/09 10:54:45 mha Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -2124,9 +2124,21 @@ XLogBackgroundFlush(void)
flexible = false; /* ensure it all gets written */
}
/* Done if already known flushed */
/*
* If already known flushed, we're done. Just need to check if we
* are holding an open file handle to a logfile that's no longer
* in use, preventing the file from being deleted.
*/
if (XLByteLE(WriteRqstPtr, LogwrtResult.Flush))
{
if (openLogFile >= 0) {
if (!XLByteInPrevSeg(LogwrtResult.Write, openLogId, openLogSeg))
{
XLogFileClose();
}
}
return;
}
#ifdef WAL_DEBUG
if (XLOG_DEBUG)
......
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