mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
Add a 'closing' flag on the shared file struct, and switch several of the
"internal" data structures to use it.
This commit is contained in:
parent
884ad149e2
commit
3090ac8150
@ -390,7 +390,7 @@ HDfprintf(stderr, "%s: fspace->alloc_sect_size = %Hu, fspace->sect_size = %Hu\n"
|
|||||||
cache_flags |= H5AC__DIRTIED_FLAG;
|
cache_flags |= H5AC__DIRTIED_FLAG;
|
||||||
|
|
||||||
/* On file close or flushing, does not allow section info to shrink in size */
|
/* On file close or flushing, does not allow section info to shrink in size */
|
||||||
if(f->closing || flush_in_progress) {
|
if(f->shared->closing || flush_in_progress) {
|
||||||
if(fspace->sect_size > fspace->alloc_sect_size)
|
if(fspace->sect_size > fspace->alloc_sect_size)
|
||||||
cache_flags |= H5AC__DELETED_FLAG | H5AC__TAKE_OWNERSHIP_FLAG;
|
cache_flags |= H5AC__DELETED_FLAG | H5AC__TAKE_OWNERSHIP_FLAG;
|
||||||
else
|
else
|
||||||
@ -441,7 +441,7 @@ HDfprintf(stderr, "%s: Relinquishing section info ownership\n", FUNC);
|
|||||||
/* Set flag to release section info space in file */
|
/* Set flag to release section info space in file */
|
||||||
/* On file close or flushing, only need to release section info with size
|
/* On file close or flushing, only need to release section info with size
|
||||||
bigger than previous section */
|
bigger than previous section */
|
||||||
if(f->closing || flush_in_progress) {
|
if(f->shared->closing || flush_in_progress) {
|
||||||
if(fspace->sect_size > fspace->alloc_sect_size)
|
if(fspace->sect_size > fspace->alloc_sect_size)
|
||||||
release_sinfo_space = TRUE;
|
release_sinfo_space = TRUE;
|
||||||
else
|
else
|
||||||
|
@ -1175,6 +1175,9 @@ H5F__dest(H5F_t *f, hbool_t flush)
|
|||||||
if(1 == f->shared->nrefs) {
|
if(1 == f->shared->nrefs) {
|
||||||
int actype; /* metadata cache type (enum value) */
|
int actype; /* metadata cache type (enum value) */
|
||||||
|
|
||||||
|
/* Mark this file as closing */
|
||||||
|
f->shared->closing = TRUE;
|
||||||
|
|
||||||
/* Flush at this point since the file will be closed (phase 1).
|
/* Flush at this point since the file will be closed (phase 1).
|
||||||
* Only try to flush the file if it was opened with write access, and if
|
* Only try to flush the file if it was opened with write access, and if
|
||||||
* the caller requested a flush.
|
* the caller requested a flush.
|
||||||
|
@ -309,6 +309,7 @@ struct H5F_shared_t {
|
|||||||
struct H5G_t *root_grp; /* Open root group */
|
struct H5G_t *root_grp; /* Open root group */
|
||||||
H5FO_t *open_objs; /* Open objects in file */
|
H5FO_t *open_objs; /* Open objects in file */
|
||||||
H5UC_t *grp_btree_shared; /* Ref-counted group B-tree node info */
|
H5UC_t *grp_btree_shared; /* Ref-counted group B-tree node info */
|
||||||
|
hbool_t closing; /* File is in the process of being closed */
|
||||||
|
|
||||||
/* Cached VOL connector ID & info */
|
/* Cached VOL connector ID & info */
|
||||||
hid_t vol_id; /* ID of VOL connector for the container */
|
hid_t vol_id; /* ID of VOL connector for the container */
|
||||||
|
@ -194,9 +194,9 @@ HDfprintf(stderr, "%s: type = %u, size = %Hu\n", FUNC, (unsigned)type, size);
|
|||||||
* the cache eventually adjusts/evicts ageout entries and ends up flushing out the
|
* the cache eventually adjusts/evicts ageout entries and ends up flushing out the
|
||||||
* same entry that is being serialized (flush_in_progress).
|
* same entry that is being serialized (flush_in_progress).
|
||||||
*/
|
*/
|
||||||
if((f->shared->feature_flags & aggr->feature_flag) && f->shared->fs_strategy != H5F_FSPACE_STRATEGY_NONE && (!f->closing || !f->shared->fs_persist)) {
|
if((f->shared->feature_flags & aggr->feature_flag) && f->shared->fs_strategy != H5F_FSPACE_STRATEGY_NONE && (!f->shared->closing || !f->shared->fs_persist)) {
|
||||||
#ifdef REPLACE
|
#ifdef REPLACE
|
||||||
if((f->shared->feature_flags & aggr->feature_flag) && f->shared->fs_strategy != H5F_FSPACE_STRATEGY_NONE && !f->closing) {
|
if((f->shared->feature_flags & aggr->feature_flag) && f->shared->fs_strategy != H5F_FSPACE_STRATEGY_NONE && !f->shared->closing) {
|
||||||
#endif
|
#endif
|
||||||
haddr_t aggr_frag_addr = HADDR_UNDEF; /* Address of aggregrator fragment */
|
haddr_t aggr_frag_addr = HADDR_UNDEF; /* Address of aggregrator fragment */
|
||||||
hsize_t aggr_frag_size = 0; /* Size of aggregator fragment */
|
hsize_t aggr_frag_size = 0; /* Size of aggregator fragment */
|
||||||
|
@ -325,7 +325,7 @@ H5O__mdci_delete(H5F_t *f, H5O_t H5_ATTR_UNUSED *open_oh, void *_mesg)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(f->closing) {
|
if(f->shared->closing) {
|
||||||
|
|
||||||
/* Get the eoa, and verify that it has the expected value */
|
/* Get the eoa, and verify that it has the expected value */
|
||||||
if(HADDR_UNDEF == (final_eoa = H5FD_get_eoa(f->shared->lf, H5FD_MEM_DEFAULT)) )
|
if(HADDR_UNDEF == (final_eoa = H5FD_get_eoa(f->shared->lf, H5FD_MEM_DEFAULT)) )
|
||||||
|
Loading…
Reference in New Issue
Block a user