Make the bgwriter's error recovery path do smgrcloseall(). On Windows this
authorTom Lane
Fri, 1 Dec 2006 19:55:28 +0000 (19:55 +0000)
committerTom Lane
Fri, 1 Dec 2006 19:55:28 +0000 (19:55 +0000)
should allow delete-pending files to actually go away, and thereby work
around the various complaints we've seen about 'permission denied'
errors in such cases.  Should be reasonably harmless in any case...

src/backend/postmaster/bgwriter.c

index 4d5c1d1cca86cfda6c5fb450263ff09195302be1..9062b4f7deb1984dd1180d845dd4dcde4becf946 100644 (file)
@@ -37,7 +37,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/postmaster/bgwriter.c,v 1.32 2006/11/30 18:29:12 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/postmaster/bgwriter.c,v 1.33 2006/12/01 19:55:28 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -304,6 +304,13 @@ BackgroundWriterMain(void)
         * fast as we can.
         */
        pg_usleep(1000000L);
+
+       /*
+        * Close all open files after any error.  This is helpful on Windows,
+        * where holding deleted files open causes various strange errors.
+        * It's not clear we need it elsewhere, but shouldn't hurt.
+        */
+       smgrcloseall();
    }
 
    /* We can now handle ereport(ERROR) */