Let's try forcing errno to zero before issuing fsync. The current buildfarm
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 22 Feb 2010 15:29:46 +0000 (15:29 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 22 Feb 2010 15:29:46 +0000 (15:29 +0000)
results claiming EBADF seem improbable enough that I'm not convinced fsync
is really returning that --- could it be failing to set errno at all?

src/port/copydir.c

index df763daa47f539d708846cf8cbd49caf4d143037..3cd7db7a4cd9e30d6a2485a3c219b87719b20a2a 100644 (file)
@@ -11,7 +11,7 @@
  * as a service.
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/port/copydir.c,v 1.30 2010/02/22 02:50:10 tgl Exp $
+ *   $PostgreSQL: pgsql/src/port/copydir.c,v 1.31 2010/02/22 15:29:46 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -229,9 +229,12 @@ fsync_fname(char *fname)
                (errcode_for_file_access(),
                 errmsg("could not open file \"%s\": %m", fname)));
 
+   errno = 0;
+
    if (pg_fsync(fd) != 0)
        ereport(ERROR,
                (errcode_for_file_access(),
                 errmsg("could not fsync file \"%s\": %m", fname)));
+
    close(fd);
 }