Skip to content

Commit

Permalink
doing HDF5 closing in libhdf5
Browse files Browse the repository at this point in the history
  • Loading branch information
edhartnett committed Oct 23, 2018
1 parent 35cfaef commit c2cb337
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 62 deletions.
82 changes: 41 additions & 41 deletions libhdf5/hdf5internal.c
Original file line number Diff line number Diff line change
Expand Up @@ -544,47 +544,47 @@ nc4_rec_grp_HDF5_del(NC_GRP_INFO_T *grp)
return NC_EHDFERR;
}

/* /\* Close HDF5 resources associated with types. Set values to 0 */
/* * after closing types. Because of type reference counters, these */
/* * closes can be called multiple times. *\/ */
/* for (i = 0; i < ncindexsize(grp->type); i++) */
/* { */
/* NC_TYPE_INFO_T *type = (NC_TYPE_INFO_T *)ncindexith(grp->type, i); */
/* assert(type); */

/* /\* Close any open user-defined HDF5 typeids. *\/ */
/* if (type->hdf_typeid && H5Tclose(type->hdf_typeid) < 0) */
/* return NC_EHDFERR; */
/* type->hdf_typeid = 0; */
/* if (type->native_hdf_typeid && H5Tclose(type->native_hdf_typeid) < 0) */
/* return NC_EHDFERR; */
/* type->native_hdf_typeid = 0; */

/* /\* Class-specific cleanup. Only enums and vlens have HDF5 */
/* * resources to close. *\/ */
/* switch (type->nc_type_class) */
/* { */
/* case NC_ENUM: */
/* if (type->u.e.base_hdf_typeid && H5Tclose(type->u.e.base_hdf_typeid) < 0) */
/* return NC_EHDFERR; */
/* type->u.e.base_hdf_typeid = 0; */
/* break; */

/* case NC_VLEN: */
/* if (type->u.v.base_hdf_typeid && H5Tclose(type->u.v.base_hdf_typeid) < 0) */
/* return NC_EHDFERR; */
/* type->u.v.base_hdf_typeid = 0; */
/* break; */

/* default: /\* Do nothing. *\/ */
/* break; */
/* } */
/* } */

/* /\* Close the HDF5 group. *\/ */
/* LOG((4, "%s: closing group %s", __func__, grp->hdr.name)); */
/* if (grp->hdf_grpid && H5Gclose(grp->hdf_grpid) < 0) */
/* return NC_EHDFERR; */
/* Close HDF5 resources associated with types. Set values to 0
* after closing types. Because of type reference counters, these
* closes can be called multiple times. */
for (i = 0; i < ncindexsize(grp->type); i++)
{
NC_TYPE_INFO_T *type = (NC_TYPE_INFO_T *)ncindexith(grp->type, i);
assert(type);

/* Close any open user-defined HDF5 typeids. */
if (type->hdf_typeid && H5Tclose(type->hdf_typeid) < 0)
return NC_EHDFERR;
type->hdf_typeid = 0;
if (type->native_hdf_typeid && H5Tclose(type->native_hdf_typeid) < 0)
return NC_EHDFERR;
type->native_hdf_typeid = 0;

/* Class-specific cleanup. Only enums and vlens have HDF5
* resources to close. */
switch (type->nc_type_class)
{
case NC_ENUM:
if (type->u.e.base_hdf_typeid && H5Tclose(type->u.e.base_hdf_typeid) < 0)
return NC_EHDFERR;
type->u.e.base_hdf_typeid = 0;
break;

case NC_VLEN:
if (type->u.v.base_hdf_typeid && H5Tclose(type->u.v.base_hdf_typeid) < 0)
return NC_EHDFERR;
type->u.v.base_hdf_typeid = 0;
break;

default: /* Do nothing. */
break;
}
}

/* Close the HDF5 group. */
LOG((4, "%s: closing group %s", __func__, grp->hdr.name));
if (grp->hdf_grpid && H5Gclose(grp->hdf_grpid) < 0)
return NC_EHDFERR;

return NC_NOERR;
}
Expand Down
42 changes: 21 additions & 21 deletions libsrc4/nc4internal.c
Original file line number Diff line number Diff line change
Expand Up @@ -1040,24 +1040,26 @@ nc4_type_free(NC_TYPE_INFO_T *type)
{
int i;

assert(type && type->rc && type->hdr.name);

/* Decrement the ref. count on the type */
assert(type->rc);
type->rc--;

/* Release the type, if the ref. count drops to zero */
if (0 == type->rc)
if (type->rc == 0)
{
/* Close any open user-defined HDF5 typeids. */
if (type->hdf_typeid && H5Tclose(type->hdf_typeid) < 0)
return NC_EHDFERR;
if (type->native_hdf_typeid && H5Tclose(type->native_hdf_typeid) < 0)
return NC_EHDFERR;
LOG((4, "%s: deleting type %s", __func__, type->hdr.name));

/* /\* Close any open user-defined HDF5 typeids. *\/ */
/* if (type->hdf_typeid && H5Tclose(type->hdf_typeid) < 0) */
/* return NC_EHDFERR; */
/* if (type->native_hdf_typeid && H5Tclose(type->native_hdf_typeid) < 0) */
/* return NC_EHDFERR; */

/* Free the name. */
if (type->hdr.name)
free(type->hdr.name);
free(type->hdr.name);

/* Class-specific cleanup */
/* Enums and compound types have lists of fields to clean up. */
switch (type->nc_type_class)
{
case NC_COMPOUND:
Expand All @@ -1071,7 +1073,6 @@ nc4_type_free(NC_TYPE_INFO_T *type)
field_free(field);
}
nclistfree(type->u.c.field);
type->u.c.field = NULL; /* belt and suspenders */
}
break;

Expand All @@ -1087,16 +1088,15 @@ nc4_type_free(NC_TYPE_INFO_T *type)
free(enum_member);
}
nclistfree(type->u.e.enum_member);
type->u.e.enum_member = NULL; /* belt and suspenders */

if (H5Tclose(type->u.e.base_hdf_typeid) < 0)
return NC_EHDFERR;
/* if (H5Tclose(type->u.e.base_hdf_typeid) < 0) */
/* return NC_EHDFERR; */
}
break;

case NC_VLEN:
if (H5Tclose(type->u.v.base_hdf_typeid) < 0)
return NC_EHDFERR;
/* case NC_VLEN: */
/* if (H5Tclose(type->u.v.base_hdf_typeid) < 0) */
/* return NC_EHDFERR; */

default:
break;
Expand Down Expand Up @@ -1371,10 +1371,10 @@ nc4_rec_grp_del(NC_GRP_INFO_T *grp)
}
ncindexfree(grp->type);

/* Tell HDF5 we're closing this group. */
LOG((4, "%s: closing group %s", __func__, grp->hdr.name));
if (grp->hdf_grpid && H5Gclose(grp->hdf_grpid) < 0)
return NC_EHDFERR;
/* /\* Tell HDF5 we're closing this group. *\/ */
/* LOG((4, "%s: closing group %s", __func__, grp->hdr.name)); */
/* if (grp->hdf_grpid && H5Gclose(grp->hdf_grpid) < 0) */
/* return NC_EHDFERR; */

/* Free the name. */
free(grp->hdr.name);
Expand Down

0 comments on commit c2cb337

Please sign in to comment.