diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2016-06-13 17:49:39 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2016-06-13 17:49:39 (GMT) |
commit | 7a9e13afdb134bafc070cf8bd2087a84fd0d2334 (patch) | |
tree | c16578adf13fb9312870afff86332ad190add859 /src/H5Ctag.c | |
parent | 1db1d99883397d92dc6984841fecfc391c52676d (diff) | |
download | hdf5-7a9e13afdb134bafc070cf8bd2087a84fd0d2334.zip hdf5-7a9e13afdb134bafc070cf8bd2087a84fd0d2334.tar.gz hdf5-7a9e13afdb134bafc070cf8bd2087a84fd0d2334.tar.bz2 |
[svn-r30068] Description:
Bring metadata cache corking to trunk.
Tested on:
MacOSX/64 10.11.5 (amazon) w/serial, parallel & production
(h5committest forthcoming)
Diffstat (limited to 'src/H5Ctag.c')
-rw-r--r-- | src/H5Ctag.c | 84 |
1 files changed, 77 insertions, 7 deletions
diff --git a/src/H5Ctag.c b/src/H5Ctag.c index 6c26796..4748156 100644 --- a/src/H5Ctag.c +++ b/src/H5Ctag.c @@ -54,9 +54,6 @@ /* Local Typedefs */ /******************/ -/* Define cache entry iteration callback type */ -typedef int (*H5C_tag_iter_cb_t)(H5C_cache_entry_t *entry, void *ctx); - /* Typedef for tagged entry iterator callback context - retag tagged entries */ typedef struct { haddr_t dest_tag; /* New tag value for matching entries */ @@ -70,13 +67,16 @@ typedef struct { unsigned flags; /* Flags for expunging entry */ } H5C_tag_iter_ettm_ctx_t; +/* Typedef for tagged entry iterator callback context - mark corked */ +typedef struct { + hbool_t cork_val; /* Corked value */ +} H5C_tag_iter_cork_ctx_t; + /********************/ /* Local Prototypes */ /********************/ static herr_t H5C__mark_tagged_entries(H5C_t *cache_ptr, haddr_t tag); -static int H5C__iter_tagged_entries(H5C_t *cache, haddr_t tag, hbool_t match_global, - H5C_tag_iter_cb_t cb, void *cb_ctx); /*********************/ @@ -244,7 +244,7 @@ done: * *------------------------------------------------------------------------- */ -static int +int H5C__iter_tagged_entries(H5C_t *cache, haddr_t tag, hbool_t match_global, H5C_tag_iter_cb_t cb, void *cb_ctx) { @@ -252,7 +252,7 @@ H5C__iter_tagged_entries(H5C_t *cache, haddr_t tag, hbool_t match_global, int ret_value = H5_ITER_CONT; /* Return value */ /* Function enter macro */ - FUNC_ENTER_STATIC + FUNC_ENTER_PACKAGE /* Sanity checks */ HDassert(cache != NULL); @@ -630,3 +630,73 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* H5C_expunge_tag_type_metadata() */ + +/*------------------------------------------------------------------------- + * Function: H5C__mark_tagged_entries_cork_cb + * + * Purpose: The "is_corked" field to "val" for en entry + * + * Return: H5_ITER_ERROR if error is detected, H5_ITER_CONT otherwise. + * + * Programmer: Vailin Choi + * January 2014 + * + *------------------------------------------------------------------------- + */ +static int +H5C__mark_tagged_entries_cork_cb(H5C_cache_entry_t *entry, void *_ctx) +{ + H5C_tag_iter_cork_ctx_t *ctx = (H5C_tag_iter_cork_ctx_t *)_ctx; /* Get pointer to iterator context */ + + /* Function enter macro */ + FUNC_ENTER_STATIC_NOERR + + /* Santify checks */ + HDassert(entry); + HDassert(ctx); + + /* Set the entry's "corked" field to "val" */ + entry->is_corked = ctx->cork_val; + + FUNC_LEAVE_NOAPI(SUCCEED) +} /* H5C__mark_tagged_entries_cork_cb() */ + + +/*------------------------------------------------------------------------- + * Function: H5C__mark_tagged_entries_cork + * + * Purpose: To set the "is_corked" field to "val" for entries in cache + * with the entry's tag equals to "obj_addr". + * + * Return: FAIL if error is detected, SUCCEED otherwise. + * + * Programmer: Vailin Choi + * January 2014 + * + *------------------------------------------------------------------------- + */ +herr_t +H5C__mark_tagged_entries_cork(H5C_t *cache, haddr_t obj_addr, hbool_t val) +{ + H5C_tag_iter_cork_ctx_t ctx; /* Context for iterator callback */ + herr_t ret_value = SUCCEED; /* Return value */ + + /* Function enter macro */ + FUNC_ENTER_PACKAGE + + /* Sanity checks */ + HDassert(cache); + HDassert(cache->magic == H5C__H5C_T_MAGIC); + + /* Construct context for iterator callbacks */ + ctx.cork_val = val; + + /* Iterate through entries, find each entry with the specified tag */ + /* and set the entry's "corked" field to "val" */ + if(H5C__iter_tagged_entries(cache, obj_addr, FALSE, H5C__mark_tagged_entries_cork_cb, &ctx) < 0) + HGOTO_ERROR(H5E_CACHE, H5E_BADITER, FAIL, "Iteration of tagged entries failed") + +done: + FUNC_LEAVE_NOAPI(ret_value) +} /* H5C__mark_tagged_entries_cork() */ + |