From a366c0a4925afd53c55f3e35d1770f12da6d6178 Mon Sep 17 00:00:00 2001 From: Dana Robinson Date: Tue, 6 Dec 2016 19:03:00 -0500 Subject: Fixed a valgrind problem in file shutdown exposed by the swmr.c test. --- src/H5Fint.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/H5Fint.c b/src/H5Fint.c index 363812d..a14d556 100644 --- a/src/H5Fint.c +++ b/src/H5Fint.c @@ -1185,8 +1185,15 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, } /* end if */ /* Create the 'top' file structure */ - if(NULL == (file = H5F_new(NULL, flags, fcpl_id, fapl_id, lf))) + if(NULL == (file = H5F_new(NULL, flags, fcpl_id, fapl_id, lf))) { + /* If the file has not been opened yet and the struct returned is + * NULL, H5FD_close() will never be called via H5F_dest() so we + * have to close lf here before heading to the error handling. + */ + if(H5FD_close(lf) < 0) + HDONE_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to close low-level file info") HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to initialize file structure") + } /* end if */ /* Need to set status_flags in the superblock if the driver has a 'lock' method */ if(drvr->lock) @@ -1342,10 +1349,9 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, ret_value = file; done: - if(!ret_value && file) + if((NULL == ret_value) && file) if(H5F_dest(file, dxpl_id, FALSE) < 0) HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, NULL, "problems closing file") - FUNC_LEAVE_NOAPI(ret_value) } /* end H5F_open() */ -- cgit v0.12 From 0f2f51bb7bdac91ba670bd810bab687594a60251 Mon Sep 17 00:00:00 2001 From: Dana Robinson Date: Tue, 6 Dec 2016 19:44:18 -0500 Subject: Updated the comment for the valgrind fix. --- src/H5Fint.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/H5Fint.c b/src/H5Fint.c index a14d556..fd79dc2 100644 --- a/src/H5Fint.c +++ b/src/H5Fint.c @@ -1186,9 +1186,9 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, /* Create the 'top' file structure */ if(NULL == (file = H5F_new(NULL, flags, fcpl_id, fapl_id, lf))) { - /* If the file has not been opened yet and the struct returned is - * NULL, H5FD_close() will never be called via H5F_dest() so we - * have to close lf here before heading to the error handling. + /* If this is the only time the file has been opened and the struct + * returned is NULL, H5FD_close() will never be called via H5F_dest() + * so we have to close lf here before heading to the error handling. */ if(H5FD_close(lf) < 0) HDONE_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to close low-level file info") -- cgit v0.12