diff options
author | Mohamad Chaarawi <chaarawi@hdfgroup.org> | 2012-04-10 16:30:13 (GMT) |
---|---|---|
committer | Mohamad Chaarawi <chaarawi@hdfgroup.org> | 2012-04-10 16:30:13 (GMT) |
commit | 8c20b495d070d9571e41b51c6eefe11708dde35d (patch) | |
tree | 420a2a7030f558018af8a90fc8944b328c5f8333 /src/H5L.c | |
parent | 0dbc51127e4b4bc2f3ada3b0958cc9dc2607c541 (diff) | |
download | hdf5-8c20b495d070d9571e41b51c6eefe11708dde35d.zip hdf5-8c20b495d070d9571e41b51c6eefe11708dde35d.tar.gz hdf5-8c20b495d070d9571e41b51c6eefe11708dde35d.tar.bz2 |
[svn-r22272] provide the wrapped ids to iterate/visit routines
somehow stable version
Diffstat (limited to 'src/H5L.c')
-rw-r--r-- | src/H5L.c | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -1154,8 +1154,6 @@ H5Literate(hid_t id, H5_index_t idx_type, H5_iter_order_t order, H5G_link_iterate_t lnk_op; /* Link operator */ hsize_t last_lnk; /* Index of last object looked at */ hsize_t idx; /* Internal location to hold index */ - H5VL_id_wrapper_t *id_wrapper; /* user id structure */ - hid_t grp_id; herr_t ret_value; /* Return value */ FUNC_ENTER_API(FAIL) @@ -1696,6 +1694,7 @@ H5L_link_cb(H5G_loc_t *grp_loc/*in*/, const char *name, const H5O_link_t UNUSED H5G_loc_t temp_loc; /* For UD callback */ hbool_t temp_loc_init = FALSE; /* Temporary location for UD callback (temp_loc) has been initialized */ hbool_t obj_created = FALSE; /* Whether an object was created (through a hard link) */ + H5VL_id_wrapper_t *id_wrapper; /* wrapper for the group ID */ herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI_NOINIT @@ -1790,6 +1789,16 @@ H5L_link_cb(H5G_loc_t *grp_loc/*in*/, const char *name, const H5O_link_t UNUSED if((grp_id = H5I_register(H5I_GROUP, grp, TRUE)) < 0) HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register ID for group") + /* MSC - Create a new id that points to a struct that holds the group id and the VOL plugin */ + /* Allocate new id structure */ + if(NULL == (id_wrapper = (H5VL_id_wrapper_t *)H5MM_malloc(sizeof(H5VL_id_wrapper_t)))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed") + id_wrapper->obj_id = grp_id; + id_wrapper->vol_plugin = H5F_get_vol_cls(grp_loc->oloc->file); + + if((grp_id = H5I_register(H5I_GROUP_PUBLIC, id_wrapper, TRUE)) < 0) + HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize group handle") + /* Make callback */ if((link_class->create_func)(name, grp_id, udata->lnk->u.ud.udata, udata->lnk->u.ud.size, H5P_DEFAULT) < 0) HGOTO_ERROR(H5E_LINK, H5E_CALLBACK, FAIL, "link creation callback failed") @@ -1813,7 +1822,7 @@ done: /* Close the location given to the user callback if it was created */ if(grp_id >= 0) { - if(H5I_dec_app_ref(grp_id) < 0) + if(H5I_dec_app_ref(id_wrapper->obj_id) < 0 && H5I_dec_app_ref(grp_id) < 0) HDONE_ERROR(H5E_ATOM, H5E_CANTRELEASE, FAIL, "unable to close atom from UD callback") } /* end if */ else if(grp != NULL) { |