summaryrefslogtreecommitdiffstats
path: root/src/H5Fsuper_cache.c
diff options
context:
space:
mode:
authorMike McGreevy <mamcgree@hdfgroup.org>2010-09-01 18:01:58 (GMT)
committerMike McGreevy <mamcgree@hdfgroup.org>2010-09-01 18:01:58 (GMT)
commit1a119d500af81e3e0a121943443e916dc11f1aba (patch)
tree8b28198ba33616883a8353ede68d7e7a50d64135 /src/H5Fsuper_cache.c
parent642f392ba3e2d30ae2a82e32f249461121d17cbc (diff)
downloadhdf5-1a119d500af81e3e0a121943443e916dc11f1aba.zip
hdf5-1a119d500af81e3e0a121943443e916dc11f1aba.tar.gz
hdf5-1a119d500af81e3e0a121943443e916dc11f1aba.tar.bz2
[svn-r19338] Purpose:
Fix bug in super-block load during SWMR read case. Description: This patch skips over the file truncation check whilst loading the super-block when the intent is set to SWMR read. The single writer process may have only partially flushed the file that one of the readers is trying to open, and this check for truncation would fail in that case. Tested: jam
Diffstat (limited to 'src/H5Fsuper_cache.c')
-rw-r--r--src/H5Fsuper_cache.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/H5Fsuper_cache.c b/src/H5Fsuper_cache.c
index 6305888..68e5551 100644
--- a/src/H5Fsuper_cache.c
+++ b/src/H5Fsuper_cache.c
@@ -462,12 +462,18 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
* possible is if the first file of a family of files was opened
* individually.
*/
- if(HADDR_UNDEF == (eof = H5FD_get_eof(lf)))
- HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to determine file size")
+ /* (This check can be skipped when the file is opened for SWMR read,
+ * as the file can appear truncated if only part of it has been
+ * been flushed to disk by the single writer process.)
+ */
+ if (!(f->intent && H5F_ACC_SWMR_READ)) {
+ if(HADDR_UNDEF == (eof = H5FD_get_eof(lf)))
+ HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to determine file size")
- /* (Account for the stored EOA being absolute offset -QAK) */
- if((eof + sblock->base_addr) < stored_eoa)
- HGOTO_ERROR(H5E_FILE, H5E_TRUNCATED, NULL, "truncated file")
+ /* (Account for the stored EOA being absolute offset -QAK) */
+ if((eof + sblock->base_addr) < stored_eoa)
+ HGOTO_ERROR(H5E_FILE, H5E_TRUNCATED, NULL, "truncated file")
+ } /* end if */
/*
* Tell the file driver how much address space has already been