diff options
author | David Young <dyoung@hdfgroup.org> | 2020-07-30 21:53:01 (GMT) |
---|---|---|
committer | David Young <dyoung@hdfgroup.org> | 2020-07-30 21:53:01 (GMT) |
commit | 2a64d2fe93a0ba1da27c77df8a9e3b76e3cd5ee9 (patch) | |
tree | 7b3475f076365f2006ffaac55161183d4170c777 /src/H5Fsfile.c | |
parent | 5632094d5c733af77003ecf4051a14f38645d993 (diff) | |
download | hdf5-2a64d2fe93a0ba1da27c77df8a9e3b76e3cd5ee9.zip hdf5-2a64d2fe93a0ba1da27c77df8a9e3b76e3cd5ee9.tar.gz hdf5-2a64d2fe93a0ba1da27c77df8a9e3b76e3cd5ee9.tar.bz2 |
Change H5F_open to perform deduplication of open VFDs in a more flexible way,
using the new routine H5FDdeduplicate().
Simplify H5F_open() a bit, pushing some of the configuration checks into the
SMWR VFD. For example, check that page buffering is enabled in
H5FD_vfd_swmr_open() instead of in H5F_open(). Compare VFD SWMR configurations
in H5FD_vfd_swmr_dedup() instead of in H5F_open().
Clone the default file-access property list at a new file-access property list
ID, H5P_FILE_ACCESS_ANY_VFD. The new ID is used to indicate that if the file
that's being opened is already open under an existing virtual file, and if that
virtual file would not ordinarily be opened with the default FAPL, then it's ok
to use that virtual file.
Add a new optional method, `dedup`, to H5FD_class_t, and use it to customize a
VFD's deduplication.
Customize the SWMR VFD's deduplication. Make it honor H5P_FILE_ACCESS_ANY_VFD
Embed the VFD SWMR configuration in the H5FD_vfd_swmr_t to facilitate
comparison of configuration between new and old SWMR virtual files.
In H5F__sfile_search(), match using a pointer comparison instead of H5FD_cmp(),
because we will only ever enter H5F__sfile_search() with a deduplicated
H5FD_t *.
Diffstat (limited to 'src/H5Fsfile.c')
-rw-r--r-- | src/H5Fsfile.c | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/src/H5Fsfile.c b/src/H5Fsfile.c index 9a9bbab..3cbd490 100644 --- a/src/H5Fsfile.c +++ b/src/H5Fsfile.c @@ -138,28 +138,14 @@ done: H5F_shared_t * H5F__sfile_search(H5FD_t *lf) { - H5F_sfile_node_t *curr; /* Current shared file node */ - H5F_shared_t *ret_value = NULL; /* Return value */ - - FUNC_ENTER_PACKAGE_NOERR - - /* Sanity check */ - HDassert(lf); - - /* Iterate through low-level files for matching low-level file info */ - curr = H5F_sfile_head_g; - while(curr) { - /* Check for match */ - if(0 == H5FD_cmp(curr->shared->lf, lf)) - HGOTO_DONE(curr->shared) - - /* Advance to next shared file node */ - curr = curr->next; - } /* end while */ - -done: - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5F__sfile_search() */ + H5F_sfile_node_t *curr; + + for (curr = H5F_sfile_head_g; curr != NULL; curr = curr->next) { + if(curr->shared->lf == lf) + return curr->shared; + } + return NULL; +} /*------------------------------------------------------------------------- |