mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-30 15:32:37 +08:00
[svn-r6720] Purpose:
Bug Fix Description: A resource leak happened if the H5Fget_access_plist() function was called. What was happening: the driver ID and info parts of the property list copied in H5Fget_access_plist were being overwritten, but those properties were copied initially, so we lost information. Added calls to the H5Fget_access_plist function to get the PList and then immediately close it. It would cause an infinite loop if there is a resource leak. Solution: Before copying over those values, call the H5F_acs_close() function to close those values. Platforms tested: Modi4 (Parallel & Fortran) Arabica (Fortran) Verbena (Fortran & C++) Misc. update:
This commit is contained in:
parent
099e781c61
commit
535172c8fb
@ -54,7 +54,7 @@ const char *FILENAME[] = {
|
||||
static herr_t
|
||||
test_sec2(void)
|
||||
{
|
||||
hid_t file=(-1), fapl;
|
||||
hid_t file=(-1), fapl, access_fapl = -1;
|
||||
char filename[1024];
|
||||
int *fhandle=NULL;
|
||||
|
||||
@ -69,6 +69,14 @@ test_sec2(void)
|
||||
if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
|
||||
goto error;
|
||||
|
||||
/* Retrieve the access property list... */
|
||||
if ((access_fapl = H5Fget_access_plist(file)) < 0)
|
||||
goto error;
|
||||
|
||||
/* ...and close the property list */
|
||||
if (H5Pclose(access_fapl) < 0)
|
||||
goto error;
|
||||
|
||||
/* Check file handle API */
|
||||
if(H5Fget_vfd_handle(file, H5P_DEFAULT, (void **)&fhandle)<0)
|
||||
goto error;
|
||||
@ -109,7 +117,7 @@ error:
|
||||
static herr_t
|
||||
test_core(void)
|
||||
{
|
||||
hid_t file=(-1), fapl;
|
||||
hid_t file=(-1), fapl, access_fapl = -1;
|
||||
char filename[1024];
|
||||
void *fhandle=NULL;
|
||||
|
||||
@ -123,7 +131,15 @@ test_core(void)
|
||||
|
||||
if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
|
||||
goto error;
|
||||
|
||||
|
||||
/* Retrieve the access property list... */
|
||||
if ((access_fapl = H5Fget_access_plist(file)) < 0)
|
||||
goto error;
|
||||
|
||||
/* ...and close the property list */
|
||||
if (H5Pclose(access_fapl) < 0)
|
||||
goto error;
|
||||
|
||||
if(H5Fget_vfd_handle(file, H5P_DEFAULT, &fhandle)<0)
|
||||
goto error;
|
||||
if(fhandle==NULL)
|
||||
@ -167,6 +183,7 @@ static herr_t
|
||||
test_family(void)
|
||||
{
|
||||
hid_t file=(-1), fapl, fapl2=(-1), space=(-1), dset=(-1);
|
||||
hid_t access_fapl = -1;
|
||||
char filename[1024];
|
||||
char dname[]="dataset";
|
||||
int i, j;
|
||||
@ -188,6 +205,15 @@ test_family(void)
|
||||
/* Create and write dataset */
|
||||
if((space=H5Screate_simple(2, dims, NULL))<0)
|
||||
goto error;
|
||||
|
||||
/* Retrieve the access property list... */
|
||||
if ((access_fapl = H5Fget_access_plist(file)) < 0)
|
||||
goto error;
|
||||
|
||||
/* ...and close the property list */
|
||||
if (H5Pclose(access_fapl) < 0)
|
||||
goto error;
|
||||
|
||||
if((dset=H5Dcreate(file, dname, H5T_NATIVE_INT, space, H5P_DEFAULT))<0)
|
||||
goto error;
|
||||
|
||||
@ -259,6 +285,7 @@ static herr_t
|
||||
test_multi(void)
|
||||
{
|
||||
hid_t file=(-1), fapl, fapl2=(-1), dset=(-1), space=(-1);
|
||||
hid_t access_fapl = -1;
|
||||
char filename[1024];
|
||||
int *fhandle2=NULL, *fhandle=NULL;
|
||||
H5FD_mem_t mt, memb_map[H5FD_MEM_NTYPES];
|
||||
@ -305,6 +332,15 @@ test_multi(void)
|
||||
/* Create and write data set */
|
||||
if((space=H5Screate_simple(2, dims, NULL))<0)
|
||||
goto error;
|
||||
|
||||
/* Retrieve the access property list... */
|
||||
if ((access_fapl = H5Fget_access_plist(file)) < 0)
|
||||
goto error;
|
||||
|
||||
/* ...and close the property list */
|
||||
if (H5Pclose(access_fapl) < 0)
|
||||
goto error;
|
||||
|
||||
if((dset=H5Dcreate(file, dname, H5T_NATIVE_INT, space, H5P_DEFAULT))<0)
|
||||
goto error;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user