diff options
author | Dana Robinson <derobins@hdfgroup.org> | 2017-07-03 19:54:14 (GMT) |
---|---|---|
committer | Dana Robinson <derobins@hdfgroup.org> | 2017-07-03 19:54:14 (GMT) |
commit | 76b9a0e7eff83db3ed69080f62b95ae568f7129e (patch) | |
tree | 10e414c609bbc1c37862675a09a8c2c2e4d89289 /src | |
parent | d342358a3b1acd5712b3c136c3985db414f6f673 (diff) | |
download | hdf5-76b9a0e7eff83db3ed69080f62b95ae568f7129e.zip hdf5-76b9a0e7eff83db3ed69080f62b95ae568f7129e.tar.gz hdf5-76b9a0e7eff83db3ed69080f62b95ae568f7129e.tar.bz2 |
* Reverted removal of H5I_REFERENCE to avoid breaking binary
compatibility.
* Added a quick H5I_REFERENCE smoke check to test_misc19()
in tmisc.c.
Diffstat (limited to 'src')
-rw-r--r-- | src/H5.c | 1 | ||||
-rw-r--r-- | src/H5Adeprec.c | 1 | ||||
-rw-r--r-- | src/H5F.c | 1 | ||||
-rw-r--r-- | src/H5Fint.c | 1 | ||||
-rw-r--r-- | src/H5Gloc.c | 3 | ||||
-rw-r--r-- | src/H5Gname.c | 1 | ||||
-rw-r--r-- | src/H5Gtest.c | 1 | ||||
-rw-r--r-- | src/H5I.c | 4 | ||||
-rw-r--r-- | src/H5Ipublic.h | 3 | ||||
-rw-r--r-- | src/H5O.c | 2 | ||||
-rw-r--r-- | src/H5Oflush.c | 1 | ||||
-rw-r--r-- | src/H5R.c | 76 | ||||
-rw-r--r-- | src/H5T.c | 1 | ||||
-rw-r--r-- | src/H5private.h | 1 | ||||
-rw-r--r-- | src/H5trace.c | 8 |
15 files changed, 100 insertions, 5 deletions
@@ -306,6 +306,7 @@ H5_term_library(void) pending += DOWN(A_top); pending += DOWN(D_top); pending += DOWN(G_top); + pending += DOWN(R_top); pending += DOWN(S_top); pending += DOWN(T_top); diff --git a/src/H5Adeprec.c b/src/H5Adeprec.c index c37dc3c..9221254 100644 --- a/src/H5Adeprec.c +++ b/src/H5Adeprec.c @@ -318,6 +318,7 @@ H5Aget_num_attrs(hid_t loc_id) case H5I_FILE: case H5I_DATASPACE: case H5I_ATTR: + case H5I_REFERENCE: case H5I_VFL: case H5I_GENPROP_CLS: case H5I_GENPROP_LST: @@ -679,6 +679,7 @@ H5Fflush(hid_t object_id, H5F_scope_t scope) case H5I_UNINIT: case H5I_BADID: case H5I_DATASPACE: + case H5I_REFERENCE: case H5I_VFL: case H5I_GENPROP_CLS: case H5I_GENPROP_LST: diff --git a/src/H5Fint.c b/src/H5Fint.c index 512439f..e52d539 100644 --- a/src/H5Fint.c +++ b/src/H5Fint.c @@ -452,6 +452,7 @@ H5F_get_objects_cb(void *obj_ptr, hid_t obj_id, void *key) case H5I_BADID: case H5I_FILE: case H5I_DATASPACE: + case H5I_REFERENCE: case H5I_VFL: case H5I_GENPROP_CLS: case H5I_GENPROP_LST: diff --git a/src/H5Gloc.c b/src/H5Gloc.c index 8548b92..c011cdf 100644 --- a/src/H5Gloc.c +++ b/src/H5Gloc.c @@ -240,6 +240,9 @@ H5G_loc(hid_t loc_id, H5G_loc_t *loc) } /* end case */ break; + case H5I_REFERENCE: + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get group location of reference") + case H5I_UNINIT: case H5I_BADID: case H5I_VFL: diff --git a/src/H5Gname.c b/src/H5Gname.c index a90821c..7b53668 100644 --- a/src/H5Gname.c +++ b/src/H5Gname.c @@ -835,6 +835,7 @@ H5G_name_replace_cb(void *obj_ptr, hid_t obj_id, void *key) case H5I_FILE: case H5I_DATASPACE: case H5I_ATTR: + case H5I_REFERENCE: case H5I_VFL: case H5I_GENPROP_CLS: case H5I_GENPROP_LST: diff --git a/src/H5Gtest.c b/src/H5Gtest.c index 8a7f8c4..7271cdc 100644 --- a/src/H5Gtest.c +++ b/src/H5Gtest.c @@ -553,6 +553,7 @@ H5G__user_path_test(hid_t obj_id, char *user_path, size_t *user_path_len, unsign case H5I_FILE: case H5I_DATASPACE: case H5I_ATTR: + case H5I_REFERENCE: case H5I_VFL: case H5I_GENPROP_CLS: case H5I_GENPROP_LST: @@ -451,9 +451,9 @@ H5I_nmembers(H5I_type_t type) FUNC_ENTER_NOAPI(FAIL) if(type <= H5I_BADID || type >= H5I_next_type) - HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid type number") + HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid type number") if(NULL == (type_ptr = H5I_id_type_list_g[type]) || type_ptr->init_count <= 0) - HGOTO_DONE(0); + HGOTO_DONE(0); /* Set return value */ H5_CHECKED_ASSIGN(ret_value, int64_t, type_ptr->id_count, uint64_t); diff --git a/src/H5Ipublic.h b/src/H5Ipublic.h index 3ac2257..c737bbe 100644 --- a/src/H5Ipublic.h +++ b/src/H5Ipublic.h @@ -30,6 +30,8 @@ * When adding types here, add a section to the 'misc19' test in test/tmisc.c * to verify that the H5I{inc|dec|get}_ref() routines work correctly with it. * + * NOTE: H5I_REFERENCE is not used by the library and has been deprecated + * with a tentative removal version of 1.12.0. (DER, July 2017) */ typedef enum H5I_type_t { H5I_UNINIT = (-2), /* uninitialized type */ @@ -40,6 +42,7 @@ typedef enum H5I_type_t { H5I_DATASPACE, /* type ID for Dataspace objects */ H5I_DATASET, /* type ID for Dataset objects */ H5I_ATTR, /* type ID for Attribute objects */ + H5I_REFERENCE, /* *DEPRECATED* type ID for Reference objects */ H5I_VFL, /* type ID for virtual file layer */ H5I_GENPROP_CLS, /* type ID for generic property list classes */ H5I_GENPROP_LST, /* type ID for generic property lists */ @@ -1081,6 +1081,7 @@ H5Oclose(hid_t object_id) case H5I_FILE: case H5I_DATASPACE: case H5I_ATTR: + case H5I_REFERENCE: case H5I_VFL: case H5I_GENPROP_CLS: case H5I_GENPROP_LST: @@ -2627,6 +2628,7 @@ H5O_get_loc(hid_t object_id) case H5I_FILE: case H5I_DATASPACE: case H5I_ATTR: + case H5I_REFERENCE: case H5I_VFL: case H5I_GENPROP_CLS: case H5I_GENPROP_LST: diff --git a/src/H5Oflush.c b/src/H5Oflush.c index 387e0ff..9764f56 100644 --- a/src/H5Oflush.c +++ b/src/H5Oflush.c @@ -396,6 +396,7 @@ H5O_refresh_metadata_reopen(hid_t oid, H5G_loc_t *obj_loc, hid_t dxpl_id, hbool_ case H5I_FILE: case H5I_DATASPACE: case H5I_ATTR: + case H5I_REFERENCE: case H5I_VFL: case H5I_GENPROP_CLS: case H5I_GENPROP_LST: @@ -71,6 +71,17 @@ hbool_t H5_PKG_INIT_VAR = FALSE; /* Local Variables */ /*******************/ +/* Reference ID class */ +static const H5I_class_t H5I_REFERENCE_CLS[1] = {{ + H5I_REFERENCE, /* ID class value */ + 0, /* Class flags */ + 0, /* # of reserved IDs for class */ + NULL /* Callback routine for closing objects of this class */ +}}; + +/* Flag indicating "top" of interface has been initialized */ +static hbool_t H5R_top_package_initialize_s = FALSE; + /*-------------------------------------------------------------------------- @@ -92,6 +103,13 @@ H5R__init_package(void) FUNC_ENTER_NOAPI_NOINIT +/* Initialize the atom group for the file IDs */ + if(H5I_register_type(H5I_REFERENCE_CLS) < 0) + HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, FAIL, "unable to initialize interface") + + /* Mark "top" of interface as initialized, too */ + H5R_top_package_initialize_s = TRUE; + done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5R__init_package() */ @@ -99,6 +117,46 @@ done: /*-------------------------------------------------------------------------- NAME + H5R_top_term_package + PURPOSE + Terminate various H5R objects + USAGE + void H5R_top_term_package() + RETURNS + void + DESCRIPTION + Release IDs for the atom group, deferring full interface shutdown + until later (in H5R_term_package). + GLOBAL VARIABLES + COMMENTS, BUGS, ASSUMPTIONS + Can't report errors... + EXAMPLES + REVISION LOG +--------------------------------------------------------------------------*/ +int +H5R_top_term_package(void) +{ + int n = 0; + + FUNC_ENTER_NOAPI_NOINIT_NOERR + + if(H5R_top_package_initialize_s) { + if(H5I_nmembers(H5I_REFERENCE) > 0) { + (void)H5I_clear_type(H5I_REFERENCE, FALSE, FALSE); + n++; /*H5I*/ + } /* end if */ + + /* Mark closed */ + if(0 == n) + H5R_top_package_initialize_s = FALSE; + } /* end if */ + + FUNC_LEAVE_NOAPI(n) +} /* end H5R__init_package() */ + + +/*-------------------------------------------------------------------------- + NAME H5R_term_package PURPOSE Terminate various H5R objects @@ -120,12 +178,24 @@ done: int H5R_term_package(void) { + int n = 0; + FUNC_ENTER_NOAPI_NOINIT_NOERR - if(H5_PKG_INIT_VAR) - H5_PKG_INIT_VAR = FALSE; + if(H5_PKG_INIT_VAR) { + /* Sanity checks */ + HDassert(0 == H5I_nmembers(H5I_REFERENCE)); + HDassert(FALSE == H5R_top_package_initialize_s); + + /* Destroy the reference id group */ + n += (H5I_dec_type_ref(H5I_REFERENCE) > 0); + + /* Mark closed */ + if(0 == n) + H5_PKG_INIT_VAR = FALSE; + } - FUNC_LEAVE_NOAPI(0) + FUNC_LEAVE_NOAPI(n) } /* end H5R_term_package() */ @@ -1673,6 +1673,7 @@ H5Tcopy(hid_t type_id) case H5I_GROUP: case H5I_DATASPACE: case H5I_ATTR: + case H5I_REFERENCE: case H5I_VFL: case H5I_GENPROP_CLS: case H5I_GENPROP_LST: diff --git a/src/H5private.h b/src/H5private.h index ff45cec..ca4ebcf 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -2593,6 +2593,7 @@ H5_DLL int H5L_term_package(void); H5_DLL int H5P_term_package(void); H5_DLL int H5PL_term_package(void); H5_DLL int H5R_term_package(void); +H5_DLL int H5R_top_term_package(void); H5_DLL int H5S_term_package(void); H5_DLL int H5S_top_term_package(void); H5_DLL int H5SL_term_package(void); diff --git a/src/H5trace.c b/src/H5trace.c index e2a746b..9fb8a72 100644 --- a/src/H5trace.c +++ b/src/H5trace.c @@ -1320,6 +1320,10 @@ H5_trace(const double *returning, const char *func, const char *type, ...) fprintf(out, "%ld (attr)", (long)obj); break; + case H5I_REFERENCE: + fprintf(out, "%ld (reference)", (long)obj); + break; + case H5I_VFL: fprintf(out, "%ld (file driver)", (long)obj); break; @@ -1497,6 +1501,10 @@ H5_trace(const double *returning, const char *func, const char *type, ...) fprintf(out, "H5I_ATTR"); break; + case H5I_REFERENCE: + fprintf(out, "H5I_REFERENCE"); + break; + case H5I_VFL: fprintf(out, "H5I_VFL"); break; |