summaryrefslogtreecommitdiffstats
path: root/src/H5F.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2009-08-21 04:54:31 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2009-08-21 04:54:31 (GMT)
commitd591ac4bf79dde02ceea8d16dbe9e601da99757a (patch)
tree8e65dd2aa24bc80c7a058425b8227e4acd1cbc19 /src/H5F.c
parent055d727f3f6c1f135c262037cfe7bc1e65eef61d (diff)
downloadhdf5-d591ac4bf79dde02ceea8d16dbe9e601da99757a.zip
hdf5-d591ac4bf79dde02ceea8d16dbe9e601da99757a.tar.gz
hdf5-d591ac4bf79dde02ceea8d16dbe9e601da99757a.tar.bz2
[svn-r17403] Description:
Eliminate 'closing' flag to dataset flush routine, since all cached dataset information has already been flushed when a file is closed and the datasets themselves will be closed (and the dataset caches destroyed). Skip calling more flush routines when the file is closing, in preparation for eventual separation of the 'flush' concept from the 'shutdown the cache' concept. Tested on: FreeBSD/32 6.3 (duty) in debug mode FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode Mac OS X/32 10.5.8 (amazon) in debug mode Mac OS X/32 10.5.8 (amazon) w/C++ & FORTRAN, w/threadsafe, in production mode
Diffstat (limited to 'src/H5F.c')
-rw-r--r--src/H5F.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/H5F.c b/src/H5F.c
index 353c0fc..4212d6e 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -1619,9 +1619,8 @@ done:
/*-------------------------------------------------------------------------
* Function: H5F_flush
*
- * Purpose: Flushes (and optionally invalidates) cached data plus the
- * file superblock. If the logical file size field is zero
- * then it is updated to be the length of the superblock.
+ * Purpose: Flushes (and optionally invalidates) cached data, possibly
+ * in all mounted files, depending on the SCOPE.
*
* Return: Non-negative on success/Negative on failure
*
@@ -1697,9 +1696,12 @@ H5F_flush_real(H5F_t *f, hid_t dxpl_id, hbool_t closing)
/* Sanity check arguments */
HDassert(f);
- /* Flush any cached dataset storage raw data */
- if(H5D_flush(f, dxpl_id, closing) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush dataset cache")
+ /* If we will be closing the file, we don't need to flush the dataset info */
+ if(!closing) {
+ /* Flush any cached dataset storage raw data */
+ if(H5D_flush(f, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush dataset cache")
+ } /* end if */
/* If we will be closing the file, we should release the free space
* information now (needs to happen before truncating the file and
@@ -1736,13 +1738,19 @@ H5F_flush_real(H5F_t *f, hid_t dxpl_id, hbool_t closing)
if(H5AC_flush(f, dxpl_id, H5AC_flags) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush metadata cache")
- /* Flush out the metadata accumulator */
- if(H5F_accum_flush(f, dxpl_id) < 0)
- HGOTO_ERROR(H5E_IO, H5E_CANTFLUSH, FAIL, "unable to flush metadata accumulator")
+ /* If we will be closing the file, we don't need to flush the accumulator info */
+ if(!closing) {
+ /* Flush out the metadata accumulator */
+ if(H5F_accum_flush(f, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_CANTFLUSH, FAIL, "unable to flush metadata accumulator")
+ } /* end if */
- /* Flush file buffers to disk. */
- if(H5FD_flush(f->shared->lf, dxpl_id, closing) < 0)
- HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "low level flush failed")
+ /* If we will be closing the file, we don't need to flush file buffers */
+ if(!closing) {
+ /* Flush file buffers to disk. */
+ if(H5FD_flush(f->shared->lf, dxpl_id, closing) < 0)
+ HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "low level flush failed")
+ } /* end if */
done:
FUNC_LEAVE_NOAPI(ret_value)