summaryrefslogtreecommitdiffstats
path: root/src/H5FDsec2.c
diff options
context:
space:
mode:
authorJohn Mainzer <mainzer@hdfgroup.org>2008-11-27 04:48:40 (GMT)
committerJohn Mainzer <mainzer@hdfgroup.org>2008-11-27 04:48:40 (GMT)
commit53fcc77e7d077f1a9ca17d63787634baa1d2893c (patch)
tree8712d00af172c5aa7c3e65e732ef57eec1c5b40f /src/H5FDsec2.c
parent230a3eff621be4d8954feceb4565a45249a465f0 (diff)
downloadhdf5-53fcc77e7d077f1a9ca17d63787634baa1d2893c.zip
hdf5-53fcc77e7d077f1a9ca17d63787634baa1d2893c.tar.gz
hdf5-53fcc77e7d077f1a9ca17d63787634baa1d2893c.tar.bz2
[svn-r16136] Several changes:
Modified H5C2_journal_post_flush() write the super block and flush the file before truncating the journal. Failure to do this opened a window in which the application could crash leaving the HDF5 file in a state that was un-recoverable. The hope is that this will fix the file recovery bug observed on RSQ -- but I have not been able to test there. However, I was able to generate a similar bug on Linew, and this fix seems to deal with the Linew bug. Added a third test to the h5recovery tests. This is really a test for the library, but it was easier to use existing test code there to construct the new test. The new test runs the same application repeatedly, but setting a timer to crash the application at progressively later times. The object is to search for windows in which the application leaves the HDF5 file in an un-recoverable state. Also, updated H5recover.c to use HDstrtoll() instead of HDstrtod() to read some addresses and such from the journal file. Tested serial (debug) on Phoenix and Linew, and parallel (debug) on Jam.
Diffstat (limited to 'src/H5FDsec2.c')
-rw-r--r--src/H5FDsec2.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/H5FDsec2.c b/src/H5FDsec2.c
index b01ba3f..0a3879b 100644
--- a/src/H5FDsec2.c
+++ b/src/H5FDsec2.c
@@ -903,6 +903,9 @@ H5FD_sec2_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned UNUSED closing)
/* Reset last file I/O information */
file->pos = HADDR_UNDEF;
file->op = OP_UNKNOWN;
+#if 1 /* JRM */
+ fsync(file->fd);
+#endif /* JRM */
}
done: