[svn-r3021] Purpose:

Bug fix
Description:
    Moving VL data reclamation to be more local to where the data is read in.
Platforms tested:
    Linux 2.2.16-3smp (eirene)
This commit is contained in:
Quincey Koziol 2000-11-29 12:39:09 -05:00
parent 19d811532a
commit 7062c4889a

View File

@ -1126,14 +1126,6 @@ h5dump_sprint(h5dump_str_t *str/*in,out*/, const h5dump_t *info,
H5Tclose(memb);
/* Create a datatype for reclaiming the memory */
space=H5Screate(H5S_SCALAR);
/* Reclaim the VL memory */
H5Dvlen_reclaim(type,space,H5P_DEFAULT,cp_vp);
/* Let the dataspace go */
H5Sclose(space);
} else {
/* All other types get printed as hexadecimal */
unsigned int i;
@ -1483,6 +1475,9 @@ h5dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset,
hsize_t hs_size[H5S_MAX_RANK]; /*size this pass */
hsize_t hs_nelmts; /*elements in request */
/* VL data special information */
unsigned vl_data=0; /* Whether the dataset contains VL datatypes */
#if 0
hsize_t dim_n_size;
#endif
@ -1519,6 +1514,10 @@ h5dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset,
ctx.size_last_dim = total_size[ctx.ndims - 1];
/* Check if we have VL data in the dataset's datatype */
if(H5Tdetect_class(p_type,H5T_VLEN)==TRUE)
vl_data=TRUE;
/*
* Determine the strip mine size and allocate a buffer. The strip mine is
* a hyperslab whose size is manageable.
@ -1571,6 +1570,10 @@ h5dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset,
h5dump_simple_data(stream, info, dset, &ctx, flags, hs_nelmts,
p_type, sm_buf);
/* Reclaim any VL memory, if necessary */
if(vl_data)
H5Dvlen_reclaim(p_type,sm_space,H5P_DEFAULT,sm_buf);
/* Calculate the next hyperslab offset */
for (i = ctx.ndims, carry = 1; i > 0 && carry; --i) {
ctx.p_min_idx[i - 1] = ctx.p_max_idx[i - 1];