mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-31 17:10:47 +08:00
[svn-r22375] add a test to expose a memory leak when adding/removing the same property in property list multiple times.
fix that bug. test with h5committest
This commit is contained in:
parent
27535adaa9
commit
7aaa1ad229
@ -2314,9 +2314,13 @@ H5P_insert(H5P_genplist_t *plist, const char *name, size_t size,
|
||||
|
||||
/* Check if the property has been deleted */
|
||||
if(NULL != H5SL_search(plist->del, name)) {
|
||||
char *temp_name = NULL;
|
||||
/* Remove the property name from the deleted property skip list */
|
||||
if(NULL == H5SL_remove(plist->del, name))
|
||||
if(NULL == (temp_name = H5SL_remove(plist->del, name)))
|
||||
HGOTO_ERROR(H5E_PLIST,H5E_CANTDELETE,FAIL,"can't remove property from deleted skip list")
|
||||
|
||||
/* free the name of the removed property */
|
||||
H5MM_xfree(temp_name);
|
||||
} /* end if */
|
||||
else {
|
||||
H5P_genclass_t *tclass; /* Temporary class pointer */
|
||||
|
@ -1573,6 +1573,46 @@ test_genprop_class_addprop(void)
|
||||
|
||||
} /* end test_genprop_class_addprop() */
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_genprop_list_add_remove_prop(): Test adding then removing the
|
||||
** same properties to a standard HDF5 property list. This is testing
|
||||
** also for a memory leak that could be caused by not freeing the
|
||||
** removed property resources from the property list.
|
||||
**
|
||||
****************************************************************/
|
||||
static void
|
||||
test_genprop_list_add_remove_prop(void)
|
||||
{
|
||||
hid_t pid; /* Property List ID */
|
||||
herr_t ret; /* Generic return value */
|
||||
|
||||
/* Create a dataset creation property list */
|
||||
pid = H5Pcreate(H5P_DATASET_CREATE);
|
||||
CHECK(pid, FAIL, "H5Pcreate");
|
||||
|
||||
/* Insert temporary property into class (with no callbacks) */
|
||||
ret = H5Pinsert2(pid, PROP1_NAME, PROP1_SIZE, PROP1_DEF_VALUE, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
CHECK_I(ret, "H5Pinsert2");
|
||||
|
||||
/* Delete added property */
|
||||
ret = H5Premove(pid, PROP1_NAME);
|
||||
CHECK_I(ret, "H5Premove");
|
||||
|
||||
/* Insert temporary property into class (with no callbacks) */
|
||||
ret = H5Pinsert2(pid, PROP1_NAME, PROP1_SIZE, PROP1_DEF_VALUE, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
CHECK_I(ret, "H5Pinsert2");
|
||||
|
||||
/* Delete added property */
|
||||
ret = H5Premove(pid, PROP1_NAME);
|
||||
CHECK_I(ret, "H5Premove");
|
||||
|
||||
/* Close property list */
|
||||
ret = H5Pclose(pid);
|
||||
CHECK(ret, FAIL, "H5Pclose");
|
||||
|
||||
} /* end test_genprop_list_add_remove_prop() */
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_genprop_equal(): Test basic generic property list code.
|
||||
@ -1990,6 +2030,8 @@ test_genprop(void)
|
||||
test_genprop_list_addprop(); /* Test adding properties to HDF5 property list */
|
||||
test_genprop_class_addprop(); /* Test adding properties to HDF5 property class */
|
||||
|
||||
test_genprop_list_add_remove_prop(); /* Test adding and removing the same property several times to HDF5 property list */
|
||||
|
||||
test_genprop_equal(); /* Tests for more H5Pequal verification */
|
||||
test_genprop_path(); /* Tests for class path verification */
|
||||
test_genprop_refcount(); /* Tests for class reference counting */
|
||||
|
Loading…
x
Reference in New Issue
Block a user