[svn-r15485] Purpose: Allow library to shut down properly when objects have reference count
> 1.
Description: Added a new field 'app_count' to H5I_id_info_t struct, to track
the reference count on an id due to the application. the old 'count' field
tracks the total. Generally any id visible to the application gets placed
in app_count. Added app_ref boolean parameter to H5I_inc_ref, H5I_dec_ref,
H5I_register, H5I_clear_type, and a few other functions, to specify whether
the operation(s) being performed on the id(s) are due to the application
(TRUE) or not (FALSE). Test added for this case.
Tested: kagiso, smirom, linew (h5committest)
This commit is contained in:
@@ -222,7 +222,7 @@ H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
|
||||
|
||||
/* Make a copy of the default property list */
|
||||
if((tmp_gcpl = H5P_copy_plist(gc_plist)) < 0)
|
||||
if((tmp_gcpl = H5P_copy_plist(gc_plist, FALSE)) < 0)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to copy the creation property list")
|
||||
|
||||
/* Get pointer to the copied property list */
|
||||
@@ -245,12 +245,12 @@ H5Gcreate1(hid_t loc_id, const char *name, size_t size_hint)
|
||||
if(NULL == (grp = H5G_create_named(&loc, name, H5P_LINK_CREATE_DEFAULT,
|
||||
tmp_gcpl, H5P_GROUP_ACCESS_DEFAULT, H5AC_dxpl_id)))
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to create group")
|
||||
if((ret_value = H5I_register(H5I_GROUP, grp)) < 0)
|
||||
if((ret_value = H5I_register(H5I_GROUP, grp, TRUE)) < 0)
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register group")
|
||||
|
||||
done:
|
||||
if(tmp_gcpl > 0 && tmp_gcpl != H5P_GROUP_CREATE_DEFAULT)
|
||||
if(H5I_dec_ref(tmp_gcpl) < 0)
|
||||
if(H5I_dec_ref(tmp_gcpl, TRUE) < 0)
|
||||
HDONE_ERROR(H5E_SYM, H5E_CLOSEERROR, FAIL, "unable to release property list")
|
||||
|
||||
if(ret_value < 0)
|
||||
@@ -299,7 +299,7 @@ H5Gopen1(hid_t loc_id, const char *name)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open group")
|
||||
|
||||
/* Register an atom for the group */
|
||||
if((ret_value = H5I_register(H5I_GROUP, grp)) < 0)
|
||||
if((ret_value = H5I_register(H5I_GROUP, grp, TRUE)) < 0)
|
||||
HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register group")
|
||||
|
||||
done:
|
||||
|
||||
Reference in New Issue
Block a user