[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:
Neil Fortner
2008-08-19 11:35:16 -05:00
parent 936e52b581
commit a59d91d192
67 changed files with 785 additions and 535 deletions

View File

@@ -46,7 +46,8 @@
/********************/
static htri_t H5O_dtype_isa(H5O_t *loc);
static hid_t H5O_dtype_open(const H5G_loc_t *obj_loc, hid_t dxpl_id);
static hid_t H5O_dtype_open(const H5G_loc_t *obj_loc, hid_t dxpl_id,
hbool_t app_ref);
static void *H5O_dtype_create(H5F_t *f, void *_crt_info, H5G_loc_t *obj_loc,
hid_t dxpl_id);
static H5O_loc_t *H5O_dtype_get_oloc(hid_t obj_id);
@@ -127,7 +128,7 @@ done:
*-------------------------------------------------------------------------
*/
static hid_t
H5O_dtype_open(const H5G_loc_t *obj_loc, hid_t dxpl_id)
H5O_dtype_open(const H5G_loc_t *obj_loc, hid_t dxpl_id, hbool_t app_ref)
{
H5T_t *type = NULL; /* Datatype opened */
hid_t ret_value; /* Return value */
@@ -141,7 +142,7 @@ H5O_dtype_open(const H5G_loc_t *obj_loc, hid_t dxpl_id)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTOPENOBJ, FAIL, "unable to open datatype")
/* Register an ID for the datatype */
if((ret_value = H5I_register(H5I_DATATYPE, type)) < 0)
if((ret_value = H5I_register(H5I_DATATYPE, type, app_ref)) < 0)
HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register datatype")
done: