summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/H5F.c4
-rw-r--r--src/H5FD.c10
2 files changed, 9 insertions, 5 deletions
diff --git a/src/H5F.c b/src/H5F.c
index b111971..fcf0d84 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -2371,7 +2371,7 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
if(invalidate) {
if(f->shared->lf->feature_flags&H5FD_FEAT_AGGREGATE_METADATA) {
/* Return the unused portion of the metadata block to a free list */
- if(f->shared->lf->eoma!=0 && f->shared->lf->cur_meta_block_size!=0)
+ if(f->shared->lf->eoma!=0)
if(H5FD_free(f->shared->lf,H5FD_MEM_DEFAULT,f->shared->lf->eoma,f->shared->lf->cur_meta_block_size)<0)
HRETURN_ERROR(H5E_VFL, H5E_CANTFREE, FAIL, "can't free metadata block");
@@ -2381,7 +2381,7 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
} /* end if */
if(f->shared->lf->feature_flags&H5FD_FEAT_AGGREGATE_SMALLDATA) {
/* Return the unused portion of the "small data" block to a free list */
- if(f->shared->lf->eosda!=0 && f->shared->lf->cur_sdata_block_size!=0)
+ if(f->shared->lf->eosda!=0)
if(H5FD_free(f->shared->lf,H5FD_MEM_DRAW,f->shared->lf->eosda,f->shared->lf->cur_sdata_block_size)<0)
HRETURN_ERROR(H5E_VFL, H5E_CANTFREE, FAIL, "can't free 'small data' block");
diff --git a/src/H5FD.c b/src/H5FD.c
index cd16130..dcab396 100644
--- a/src/H5FD.c
+++ b/src/H5FD.c
@@ -1467,7 +1467,7 @@ H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
} /* end if */
else {
/* Return the unused portion of the metadata block to a free list */
- if(file->eoma!=0 && file->cur_meta_block_size!=0)
+ if(file->eoma!=0)
if(H5FD_free(file,H5FD_MEM_DEFAULT,file->eoma,file->cur_meta_block_size)<0)
HRETURN_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "can't free metadata block");
@@ -1536,7 +1536,7 @@ H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
} /* end if */
else {
/* Return the unused portion of the "small data" block to a free list */
- if(file->eosda!=0 && file->cur_sdata_block_size!=0)
+ if(file->eosda!=0)
if(H5FD_free(file,H5FD_MEM_DRAW,file->eosda,file->cur_sdata_block_size)<0)
HRETURN_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "can't free 'small data' block");
@@ -1739,11 +1739,15 @@ H5FD_free(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size)
/* Check args */
assert(file && file->cls);
assert(type>=0 && type<H5FD_MEM_NTYPES);
- if (!H5F_addr_defined(addr) || addr>file->maxaddr || 0==size ||
+ if (!H5F_addr_defined(addr) || addr>file->maxaddr ||
H5F_addr_overflow(addr, size) || addr+size>file->maxaddr) {
HRETURN_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid region");
}
+ /* Allow 0-sized free's to occur without penalty */
+ if(0==size)
+ HRETURN(SUCCEED);
+
/* Map request type to free list */
if (H5FD_MEM_DEFAULT==file->cls->fl_map[type]) {
mapped_type = type;