Arrange to fsync the contents of lockfiles (both postmaster.pid and the
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 16 Aug 2010 17:33:30 +0000 (17:33 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 16 Aug 2010 17:33:30 +0000 (17:33 +0000)
socket lockfile) when writing them.  The lack of an fsync here may well
explain two different reports we've seen of corrupted lockfile contents,
which doesn't particularly bother the running server but can prevent a
new server from starting if the old one crashes.  Per suggestion from
Alvaro.

Back-patch to all supported versions.

src/backend/utils/init/miscinit.c

index 614f0a205fdf110647fbb304d96c503a5ac1fbea..3f2212d3745b8515942d5bc897d7925d6649a39f 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.116.2.2 2009/12/09 21:59:07 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.116.2.3 2010/08/16 17:33:30 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -721,6 +721,7 @@ CreateLockFile(const char *filename, bool amPostmaster,
                (errcode_for_file_access(),
              errmsg("could not write lock file \"%s\": %m", filename)));
    }
+   pg_fsync(fd);
    close(fd);
 
    /*
@@ -875,6 +876,7 @@ RecordSharedMemoryInLockFile(unsigned long id1, unsigned long id2)
        close(fd);
        return;
    }
+   pg_fsync(fd);
    close(fd);
 }