From 1a119d500af81e3e0a121943443e916dc11f1aba Mon Sep 17 00:00:00 2001 From: Mike McGreevy Date: Wed, 1 Sep 2010 13:01:58 -0500 Subject: [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 --- src/H5Fsuper_cache.c | 16 +++++++++++----- 1 file 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 -- cgit v0.12