summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2008-06-06 20:25:35 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2008-06-06 20:25:35 (GMT)
commit791ab755ac81dc50adabdfe269107722da90f659 (patch)
tree0ff85448b4b81ad38b205e613d4f0eb4e255b83d /src
parent44db7da08789c0a2c4b82d74f70fbe6b1831eefd (diff)
downloadhdf5-791ab755ac81dc50adabdfe269107722da90f659.zip
hdf5-791ab755ac81dc50adabdfe269107722da90f659.tar.gz
hdf5-791ab755ac81dc50adabdfe269107722da90f659.tar.bz2
[svn-r15171] Description:
Convert the symbol table node metadata cache client to use the new journaling cache callbacks. Also added a 'H5F_t *' parameter to the 'serialize' callback for the journaling cache, which makes the client's job much easier. Various minor coding cleanups, etc. also. Tested on: FreeBSD/32 6.2 (duty) in debug mode FreeBSD/64 6.2 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/default API=1.6.x, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Mac OS X/32 10.5.3 (amazon) in debug mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Diffstat (limited to 'src')
-rw-r--r--src/H5AC2.c2
-rw-r--r--src/H5AC2private.h2
-rw-r--r--src/H5Bcache.c17
-rw-r--r--src/H5C2.c21
-rw-r--r--src/H5C2journal.c56
-rw-r--r--src/H5C2pkg.h2
-rw-r--r--src/H5C2private.h16
-rw-r--r--src/H5F.c39
-rw-r--r--src/H5Fdbg.c1
-rw-r--r--src/H5Fprivate.h2
-rw-r--r--src/H5Gent.c24
-rw-r--r--src/H5Gnode.c478
-rw-r--r--src/H5Gpkg.h9
-rw-r--r--src/H5MF.c6
-rw-r--r--src/H5MFprivate.h6
-rw-r--r--src/H5private.h16
16 files changed, 239 insertions, 458 deletions
diff --git a/src/H5AC2.c b/src/H5AC2.c
index 12d63d3..5967497 100644
--- a/src/H5AC2.c
+++ b/src/H5AC2.c
@@ -3205,7 +3205,7 @@ done:
*/
herr_t
-H5AC2_set_cache_auto_resize_config(const H5F_t * f,
+H5AC2_set_cache_auto_resize_config(H5F_t * f,
hid_t dxpl_id,
H5AC2_cache_config_t *config_ptr)
{
diff --git a/src/H5AC2private.h b/src/H5AC2private.h
index 520900b..4113842 100644
--- a/src/H5AC2private.h
+++ b/src/H5AC2private.h
@@ -338,7 +338,7 @@ H5_DLL herr_t H5AC2_get_cache_hit_rate(H5AC2_t * cache_ptr,
H5_DLL herr_t H5AC2_reset_cache_hit_rate_stats(H5AC2_t * cache_ptr);
-H5_DLL herr_t H5AC2_set_cache_auto_resize_config(const H5F_t * f,
+H5_DLL herr_t H5AC2_set_cache_auto_resize_config(H5F_t * f,
hid_t dxpl_id,
H5AC2_cache_config_t *config_ptr);
diff --git a/src/H5Bcache.c b/src/H5Bcache.c
index f18dee2..2ecfcf3 100644
--- a/src/H5Bcache.c
+++ b/src/H5Bcache.c
@@ -56,9 +56,8 @@
/* Metadata cache callbacks */
static void *H5B_deserialize(haddr_t addr, size_t len, const void *image,
const void *udata, hbool_t *dirty);
-static herr_t H5B_serialize(haddr_t addr, size_t len, void *image,
- void *thing, unsigned *flags, haddr_t *new_addr,
- size_t *new_len, void **new_image);
+static herr_t H5B_serialize(const H5F_t *f, haddr_t addr, size_t len, void *image,
+ void *thing, unsigned *flags, haddr_t *new_addr, size_t *new_len, void **new_image);
static herr_t H5B_free_icr(haddr_t addr, size_t len, void *thing);
@@ -66,7 +65,7 @@ static herr_t H5B_free_icr(haddr_t addr, size_t len, void *thing);
/* Package Variables */
/*********************/
-/* H5B inherits cache-like properties from H5AC */
+/* H5B inherits cache-like properties from H5AC2 */
const H5AC2_class_t H5AC2_BT[1] = {{
H5AC2_BT_ID,
"v1 B-tree",
@@ -203,8 +202,8 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B_serialize(haddr_t UNUSED addr, size_t UNUSED len, void *image, void *_thing,
- unsigned *flags, haddr_t UNUSED *new_addr, size_t UNUSED *new_len,
+H5B_serialize(const H5F_t *f, haddr_t UNUSED addr, size_t UNUSED len, void *image,
+ void *_thing, unsigned *flags, haddr_t UNUSED *new_addr, size_t UNUSED *new_len,
void UNUSED **new_image)
{
H5B_t *bt = (H5B_t *)_thing; /* Pointer to the B-tree node */
@@ -240,8 +239,8 @@ H5B_serialize(haddr_t UNUSED addr, size_t UNUSED len, void *image, void *_thing,
UINT16ENCODE(p, bt->nchildren);
/* sibling pointers */
- H5F_addr_encode_len(&p, bt->left, shared->sizeof_addr);
- H5F_addr_encode_len(&p, bt->right, shared->sizeof_addr);
+ H5F_addr_encode(f, &p, bt->left);
+ H5F_addr_encode(f, &p, bt->right);
/* child keys and pointers */
native = bt->native;
@@ -253,7 +252,7 @@ H5B_serialize(haddr_t UNUSED addr, size_t UNUSED len, void *image, void *_thing,
native += shared->type->sizeof_nkey;
/* encode the child address */
- H5F_addr_encode_len(&p, bt->child[u], shared->sizeof_addr);
+ H5F_addr_encode(f, &p, bt->child[u]);
} /* end for */
if(bt->nchildren > 0) {
/* Encode the final key */
diff --git a/src/H5C2.c b/src/H5C2.c
index 4ea6158..a85a78c 100644
--- a/src/H5C2.c
+++ b/src/H5C2.c
@@ -154,7 +154,7 @@ static herr_t H5C2__flash_increase_cache_size(H5C2_t * cache_ptr,
size_t old_entry_size,
size_t new_entry_size);
-static herr_t H5C2_flush_single_entry(H5F_t * f,
+static herr_t H5C2_flush_single_entry(const H5F_t * f,
hid_t dxpl_id,
H5C2_t * cache_ptr,
const H5C2_class_t * type_ptr,
@@ -162,7 +162,7 @@ static herr_t H5C2_flush_single_entry(H5F_t * f,
unsigned flags,
hbool_t del_entry_from_slist_on_destroy);
-static herr_t H5C2_flush_invalidate_cache(H5F_t * f,
+static herr_t H5C2_flush_invalidate_cache(const H5F_t * f,
hid_t dxpl_id,
H5C2_t * cache_ptr,
unsigned flags);
@@ -212,7 +212,8 @@ static void * H5C2_epoch_marker_deserialize(haddr_t addr,
hbool_t * dirty_ptr);
static herr_t H5C2_epoch_marker_image_len(void * thing,
size_t *image_len_ptr);
-static herr_t H5C2_epoch_marker_serialize(haddr_t addr,
+static herr_t H5C2_epoch_marker_serialize(const H5F_t *f,
+ haddr_t addr,
size_t len,
void * image_ptr,
void * thing,
@@ -258,7 +259,7 @@ H5C2_epoch_marker_deserialize(haddr_t UNUSED addr,
{
void * ret_value = NULL; /* Return value */
- FUNC_ENTER_NOAPI(H5C2_epoch_marker_serialize, NULL)
+ FUNC_ENTER_NOAPI(H5C2_epoch_marker_deserialize, NULL)
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, NULL, "called unreachable fcn.")
@@ -283,7 +284,8 @@ done:
}
static herr_t
-H5C2_epoch_marker_serialize(haddr_t UNUSED addr,
+H5C2_epoch_marker_serialize(const H5F_t UNUSED *f,
+ haddr_t UNUSED addr,
size_t UNUSED len,
void UNUSED * image_ptr,
void UNUSED * thing,
@@ -1291,7 +1293,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5C2_flush_cache(H5F_t *f,
+H5C2_flush_cache(const H5F_t *f,
hid_t dxpl_id,
unsigned flags)
{
@@ -7453,7 +7455,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5C2_flush_invalidate_cache(H5F_t * f,
+H5C2_flush_invalidate_cache(const H5F_t * f,
hid_t dxpl_id,
H5C2_t * cache_ptr,
unsigned flags)
@@ -8067,7 +8069,7 @@ done:
*/
static herr_t
-H5C2_flush_single_entry(H5F_t * f,
+H5C2_flush_single_entry(const H5F_t * f,
hid_t dxpl_id,
H5C2_t * cache_ptr,
const H5C2_class_t * type_ptr,
@@ -8460,7 +8462,8 @@ H5C2_flush_single_entry(H5F_t * f,
if ( ! ( entry_ptr->image_up_to_date ) ) {
- if ( entry_ptr->type->serialize(entry_ptr->addr,
+ if ( entry_ptr->type->serialize(f,
+ entry_ptr->addr,
entry_ptr->size,
entry_ptr->image_ptr,
(void *)entry_ptr,
diff --git a/src/H5C2journal.c b/src/H5C2journal.c
index 3e6655e..e43e2bb 100644
--- a/src/H5C2journal.c
+++ b/src/H5C2journal.c
@@ -951,7 +951,8 @@ H5C2_journal_transaction(H5F_t * f,
*/
if ( ! ( entry_ptr->image_up_to_date ) ) {
- result = entry_ptr->type->serialize(entry_ptr->addr,
+ result = entry_ptr->type->serialize(f,
+ entry_ptr->addr,
entry_ptr->size,
entry_ptr->image_ptr,
(void *)entry_ptr,
@@ -1401,7 +1402,7 @@ done:
*/
herr_t
-H5C2_create_journal_config_block(H5F_t * f,
+H5C2_create_journal_config_block(const H5F_t * f,
hid_t dxpl_id,
const char * journal_file_name_ptr)
{
@@ -1544,7 +1545,7 @@ done:
*/
herr_t
-H5C2_discard_journal_config_block(H5F_t * f,
+H5C2_discard_journal_config_block(const H5F_t * f,
hid_t dxpl_id)
{
H5C2_t * cache_ptr;
@@ -2645,15 +2646,10 @@ H5C2_jb__init(H5C2_jbrb_t * struct_ptr,
} /* end if */
/* Initialize Fields of H5C2_jbrb_t structure */
-#if 0 /* JRM */ /* initial version */
- struct_ptr->jname = journal_file_name;
-#else /* JRM */ /* revised version */
/* this should be modified to check error returns, etc. Also, should
* probably do the same with the HDF5 file name.
*/
- struct_ptr->jname = (char *)H5MM_malloc(strlen(journal_file_name) + 1);
- HDstrcpy(struct_ptr->jname, journal_file_name);
-#endif /* JRM */
+ struct_ptr->jname = HDstrdup(journal_file_name);
struct_ptr->hdf5_file_name = HDF5_file_name;
struct_ptr->buf_size = buf_size;
struct_ptr->num_bufs = num_bufs;
@@ -2736,7 +2732,7 @@ H5C2_jb__init(H5C2_jbrb_t * struct_ptr,
/* Format the header message into a temporary buffer */
HDsnprintf(temp,
(size_t)150,
- "0 ver_num %ld target_file_name %s creation_date %010.10s human_readable %d\n",
+ "0 ver_num %ld target_file_name %s creation_date %10.10s human_readable %d\n",
struct_ptr->jvers,
struct_ptr->hdf5_file_name,
ctime(&current_date),
@@ -2829,7 +2825,7 @@ H5C2_jb__start_transaction(H5C2_jbrb_t * struct_ptr,
HDsnprintf(temp,
(size_t)150,
- "0 ver_num %ld target_file_name %s creation_date %010.10s human_readable %d\n",
+ "0 ver_num %ld target_file_name %s creation_date %10.10s human_readable %d\n",
struct_ptr->jvers,
struct_ptr->hdf5_file_name,
ctime(&current_date),
@@ -3411,44 +3407,6 @@ done:
/******************************************************************************
*
- * Function: H5C2_jb__reconfigure
- *
- * Programmer: Mike McGreevy <mcgreevy@hdfgroup.org>
- * Wednesday, February 6, 2008
- *
- * Purpose: Re-configure the specified journal buffer ring buffer
- * to use the supplied parameters.
- *
- * Returns: SUCCEED on success.
- *
- ******************************************************************************/
-
-herr_t
-H5C2_jb__reconfigure(H5C2_jbrb_t * struct_ptr,
- size_t new_buf_size,
- int new_num_bufs,
- hbool_t new_use_aio)
-{
-#if 0 /* body commented out pending implementation */
- herr_t ret_value = SUCCEED;
-
- FUNC_ENTER_NOAPI(H5C2_jb__reconfigure, FAIL)
-
- /* code */
- /* code */
- /* code */
-
-done:
-
- FUNC_LEAVE_NOAPI(ret_value)
-#else
- return FAIL;
-#endif
-} /* end H5C2_jb__reconfigure */
-
-
-/******************************************************************************
- *
* Function: H5C2_jb__bin2hex
*
* Programmer: Mike McGreevy <mcgreevy@hdfgroup.org>
diff --git a/src/H5C2pkg.h b/src/H5C2pkg.h
index 5245ce6..588b7ab 100644
--- a/src/H5C2pkg.h
+++ b/src/H5C2pkg.h
@@ -1240,7 +1240,7 @@ struct H5C2_t
H5C2_cache_entry_t * jwipl_tail_ptr;
hbool_t mdj_startup_pending;
- H5F_t * mdj_startup_f;
+ H5F_t * mdj_startup_f;
hid_t mdj_startup_dxpl_id;
char * mdj_startup_jrnl_file_name;
size_t mdj_startup_buf_size;
diff --git a/src/H5C2private.h b/src/H5C2private.h
index 8ac8d67..a7b421c 100644
--- a/src/H5C2private.h
+++ b/src/H5C2private.h
@@ -118,7 +118,7 @@ typedef struct H5C2_t H5C2_t;
*
* The typedef for the deserialize callback is as follows:
*
- * typedef void *(*H5C_deserialize_func_t)(haddr_t addr,
+ * typedef void *(*H5C2_deserialize_func_t)(haddr_t addr,
* size_t len,
* const void * image_ptr,
* void * udata_ptr,
@@ -450,7 +450,8 @@ typedef herr_t (*H5C2_image_len_func_t)(void *thing,
#define H5C2__SERIALIZE_RESIZED_FLAG 0x1
#define H5C2__SERIALIZE_RENAMED_FLAG 0x2
-typedef herr_t (*H5C2_serialize_func_t)(haddr_t addr,
+typedef herr_t (*H5C2_serialize_func_t)(const H5F_t *f,
+ haddr_t addr,
size_t len,
void * image_ptr,
void * thing,
@@ -1341,7 +1342,7 @@ H5_DLL herr_t H5C2_expunge_entry(H5F_t * f,
const H5C2_class_t * type,
haddr_t addr);
-H5_DLL herr_t H5C2_flush_cache(H5F_t *f,
+H5_DLL herr_t H5C2_flush_cache(const H5F_t *f,
hid_t dxpl_id,
unsigned flags);
@@ -1555,11 +1556,6 @@ H5_DLL herr_t H5C2_jb__trunc(H5C2_jbrb_t * struct_ptr);
H5_DLL herr_t H5C2_jb__takedown(H5C2_jbrb_t * struct_ptr);
-H5_DLL herr_t H5C2_jb__reconfigure(H5C2_jbrb_t * struct_ptr,
- size_t new_buf_size,
- int new_num_bufs,
- hbool_t new_use_aio);
-
H5_DLL herr_t H5C2_jb__bin2hex(const uint8_t * buf,
char * hexdata,
size_t * hexlength,
@@ -1574,11 +1570,11 @@ H5_DLL herr_t H5C2_check_for_journaling(H5F_t * f,
H5C2_t * cache_ptr,
hbool_t journal_recovered);
-H5_DLL herr_t H5C2_create_journal_config_block(H5F_t *f,
+H5_DLL herr_t H5C2_create_journal_config_block(const H5F_t *f,
hid_t dxpl_id,
const char * journal_file_name_ptr);
-H5_DLL herr_t H5C2_discard_journal_config_block(H5F_t * f,
+H5_DLL herr_t H5C2_discard_journal_config_block(const H5F_t * f,
hid_t dxpl_id);
H5_DLL herr_t H5C2_get_journaling_in_progress(const H5F_t * f,
diff --git a/src/H5F.c b/src/H5F.c
index 21991cb..8a4b019 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -3088,7 +3088,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5F_addr_encode_len
+ * Function: H5F_addr_encode
*
* Purpose: Encodes an address into the buffer pointed to by *PP and
* then increments the pointer to the first byte after the
@@ -3099,53 +3099,30 @@ done:
* Programmer: Robb Matzke
* Friday, November 7, 1997
*
+ * Modifications:
+ * Robb Matzke, 1999-07-28
+ * The ADDR argument is passed by value.
*-------------------------------------------------------------------------
*/
void
-H5F_addr_encode_len(uint8_t **pp/*in,out*/, haddr_t addr, unsigned addr_len)
+H5F_addr_encode(const H5F_t *f, uint8_t **pp/*in,out*/, haddr_t addr)
{
unsigned u; /* Local index variable */
+ HDassert(f);
HDassert(pp && *pp);
if(H5F_addr_defined(addr)) {
- for(u = 0; u < addr_len; u++) {
+ for(u = 0; u < H5F_SIZEOF_ADDR(f); u++) {
*(*pp)++ = (uint8_t)(addr & 0xff);
addr >>= 8;
} /* end for */
assert("overflow" && 0 == addr);
} /* end if */
else {
- for(u = 0; u < addr_len; u++)
+ for(u = 0; u < H5F_SIZEOF_ADDR(f); u++)
*(*pp)++ = 0xff;
} /* end else */
-} /* end H5F_addr_encode_len() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5F_addr_encode
- *
- * Purpose: Encodes an address into the buffer pointed to by *PP and
- * then increments the pointer to the first byte after the
- * address. An undefined value is stored as all 1's.
- *
- * Return: void
- *
- * Programmer: Robb Matzke
- * Friday, November 7, 1997
- *
- * Modifications:
- * Robb Matzke, 1999-07-28
- * The ADDR argument is passed by value.
- *-------------------------------------------------------------------------
- */
-void
-H5F_addr_encode(const H5F_t *f, uint8_t **pp/*in,out*/, haddr_t addr)
-{
- HDassert(f);
- HDassert(pp && *pp);
-
- H5F_addr_encode_len(pp, addr, H5F_SIZEOF_ADDR(f));
} /* end H5F_addr_encode() */
diff --git a/src/H5Fdbg.c b/src/H5Fdbg.c
index 15ca0d9..d0fe402 100644
--- a/src/H5Fdbg.c
+++ b/src/H5Fdbg.c
@@ -136,7 +136,6 @@ H5F_debug(H5F_t *f, FILE *stream, int indent, int fwidth)
HDassert(root_oloc);
root_ent.type = H5G_NOTHING_CACHED;
root_ent.header = root_oloc->addr;
- root_ent.file = f;
/* Display root group symbol table entry info */
H5G_ent_debug(f, &root_ent, stream, indent + 3, MAX(0, fwidth - 3), NULL);
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index 7b38d7b..903f56d 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -463,8 +463,6 @@ H5_DLL herr_t H5F_block_write(const H5F_t *f, H5FD_mem_t type, haddr_t addr,
size_t size, hid_t dxpl_id, const void *buf);
/* Address-related functions */
-H5_DLL void H5F_addr_encode_len(uint8_t **pp/*in,out*/, haddr_t addr,
- unsigned addr_len);
H5_DLL void H5F_addr_encode(const H5F_t *f, uint8_t **pp/*in,out*/,
haddr_t addr);
H5_DLL void H5F_addr_decode(const H5F_t *f, const uint8_t **pp/*in,out*/,
diff --git a/src/H5Gent.c b/src/H5Gent.c
index e7be62f..7c0a2f6 100644
--- a/src/H5Gent.c
+++ b/src/H5Gent.c
@@ -34,8 +34,8 @@
/* Private macros */
/* Private prototypes */
-static herr_t H5G_ent_encode(H5F_t *f, uint8_t **pp, const H5G_entry_t *ent);
-static herr_t H5G_ent_decode(H5F_t *f, const uint8_t **pp,
+static herr_t H5G_ent_encode(const H5F_t *f, uint8_t **pp, const H5G_entry_t *ent);
+static herr_t H5G_ent_decode(const H5F_t *f, const uint8_t **pp,
H5G_entry_t *ent/*out*/);
/* Declare extern the PQ free list for the wrapped strings */
@@ -65,7 +65,7 @@ H5FL_BLK_EXTERN(str_buf);
*-------------------------------------------------------------------------
*/
herr_t
-H5G_ent_decode_vec(H5F_t *f, const uint8_t **pp, H5G_entry_t *ent, unsigned n)
+H5G_ent_decode_vec(const H5F_t *f, const uint8_t **pp, H5G_entry_t *ent, unsigned n)
{
unsigned u;
herr_t ret_value=SUCCEED; /* Return value */
@@ -110,7 +110,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5G_ent_decode(H5F_t *f, const uint8_t **pp, H5G_entry_t *ent)
+H5G_ent_decode(const H5F_t *f, const uint8_t **pp, H5G_entry_t *ent)
{
const uint8_t *p_ret = *pp;
uint32_t tmp;
@@ -122,8 +122,6 @@ H5G_ent_decode(H5F_t *f, const uint8_t **pp, H5G_entry_t *ent)
HDassert(pp);
HDassert(ent);
- ent->file = f;
-
/* decode header */
H5F_DECODE_LENGTH(f, *pp, ent->name_off);
H5F_addr_decode(f, pp, &(ent->header));
@@ -180,7 +178,7 @@ H5G_ent_decode(H5F_t *f, const uint8_t **pp, H5G_entry_t *ent)
*-------------------------------------------------------------------------
*/
herr_t
-H5G_ent_encode_vec(H5F_t *f, uint8_t **pp, const H5G_entry_t *ent, unsigned n)
+H5G_ent_encode_vec(const H5F_t *f, uint8_t **pp, const H5G_entry_t *ent, unsigned n)
{
unsigned u;
herr_t ret_value=SUCCEED; /* Return value */
@@ -228,7 +226,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5G_ent_encode(H5F_t *f, uint8_t **pp, const H5G_entry_t *ent)
+H5G_ent_encode(const H5F_t *f, uint8_t **pp, const H5G_entry_t *ent)
{
uint8_t *p_ret = *pp + H5G_SIZEOF_ENTRY(f);
@@ -272,7 +270,8 @@ H5G_ent_encode(H5F_t *f, uint8_t **pp, const H5G_entry_t *ent)
}
/* fill with zero */
- while (*pp < p_ret) *(*pp)++ = 0;
+ while(*pp < p_ret)
+ *(*pp)++ = 0;
*pp = p_ret;
FUNC_LEAVE_NOAPI(SUCCEED);
@@ -423,9 +422,6 @@ H5G_ent_convert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap, const char *name,
HGOTO_ERROR(H5E_SYM, H5E_BADVALUE, FAIL, "unrecognized link type")
} /* end switch */
- /* Set the file for the entry */
- ent->file = f;
-
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5G_ent_convert() */
@@ -445,7 +441,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5G_ent_debug(H5F_t UNUSED *f, const H5G_entry_t *ent, FILE *stream,
+H5G_ent_debug(H5F_t *f, const H5G_entry_t *ent, FILE *stream,
int indent, int fwidth, H5HL_t *heap)
{
const char *lval = NULL;
@@ -494,7 +490,7 @@ H5G_ent_debug(H5F_t UNUSED *f, const H5G_entry_t *ent, FILE *stream,
"Link value offset:",
(unsigned long)(ent->cache.slink.lval_offset));
if(heap) {
- lval = H5HL_offset_into(ent->file, heap, ent->cache.slink.lval_offset);
+ lval = H5HL_offset_into(f, heap, ent->cache.slink.lval_offset);
HDfprintf(stream, "%*s%-*s %s\n", nested_indent, "", nested_fwidth,
"Link value:",
lval);
diff --git a/src/H5Gnode.c b/src/H5Gnode.c
index e7a2d30..442cbf2 100644
--- a/src/H5Gnode.c
+++ b/src/H5Gnode.c
@@ -32,6 +32,7 @@
/* Packages needed by this file... */
#include "H5private.h" /* Generic Functions */
+#include "H5AC2private.h" /* Metadata cache #2 */
#include "H5Eprivate.h" /* Error handling */
#include "H5Fpkg.h" /* File access */
#include "H5FLprivate.h" /* Free Lists */
@@ -58,10 +59,10 @@ typedef struct H5G_node_key_t {
* table or group.
*/
typedef struct H5G_node_t {
- H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
- /* first field in structure */
- unsigned nsyms; /*number of symbols */
- H5G_entry_t *entry; /*array of symbol table entries */
+ H5AC2_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+ /* first field in structure */
+ unsigned nsyms; /*number of symbols */
+ H5G_entry_t *entry; /*array of symbol table entries */
} H5G_node_t;
/* Private macros */
@@ -72,18 +73,17 @@ typedef struct H5G_node_t {
#define H5G_NODE_BUF_SIZE 512
/* PRIVATE PROTOTYPES */
-static herr_t H5G_node_serialize(H5F_t *f, H5G_node_t *sym, size_t size, uint8_t *buf);
static size_t H5G_node_size_real(const H5F_t *f);
static herr_t H5G_node_shared_free(void *shared);
/* Metadata cache callbacks */
-static H5G_node_t *H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_udata1,
- void *_udata2);
-static herr_t H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
- H5G_node_t *sym, unsigned UNUSED * flags_ptr);
-static herr_t H5G_node_dest(H5F_t *f, H5G_node_t *sym);
-static herr_t H5G_node_clear(H5F_t *f, H5G_node_t *sym, hbool_t destroy);
-static herr_t H5G_node_size(const H5F_t *f, const H5G_node_t *sym, size_t *size_ptr);
+static void *H5G_node_deserialize(haddr_t addr, size_t len, const void *image,
+ const void *udata, hbool_t *dirty);
+static herr_t H5G_node_serialize(const H5F_t *f, haddr_t addr, size_t len,
+ void *image, void *thing, unsigned *flags, haddr_t *new_addr,
+ size_t *new_len, void **new_image);
+static herr_t H5G_node_free_icr(haddr_t addr, size_t len, void *thing);
+static herr_t H5G_node_clear(haddr_t addr, size_t len, void *sym);
/* B-tree callbacks */
static H5RC_t *H5G_node_get_shared(const H5F_t *f, const void *_udata);
@@ -110,14 +110,16 @@ static herr_t H5G_node_debug_key(FILE *stream, H5F_t *f, hid_t dxpl_id,
int indent, int fwidth, const void *key,
const void *udata);
-/* H5G inherits cache-like properties from H5AC */
-const H5AC_class_t H5AC_SNODE[1] = {{
- H5AC_SNODE_ID,
- (H5AC_load_func_t)H5G_node_load,
- (H5AC_flush_func_t)H5G_node_flush,
- (H5AC_dest_func_t)H5G_node_dest,
- (H5AC_clear_func_t)H5G_node_clear,
- (H5AC_size_func_t)H5G_node_size,
+/* H5G symbol table node inherits cache-like properties from H5AC2 */
+const H5AC2_class_t H5AC2_SNODE[1] = {{
+ H5AC2_SNODE_ID,
+ "symbol table node",
+ H5FD_MEM_BTREE,
+ H5G_node_deserialize,
+ NULL,
+ H5G_node_serialize,
+ H5G_node_free_icr,
+ H5G_node_clear,
}};
/* H5G inherits B-tree like properties from H5B */
@@ -309,70 +311,70 @@ H5G_node_size_real(const H5F_t *f)
/*-------------------------------------------------------------------------
- * Function: H5G_node_load
- *
- * Purpose: Loads a symbol table node from the file.
- *
- * Return: Success: Ptr to the new table.
+ * Function: H5G_node_dest
*
- * Failure: NULL
+ * Purpose: Destroy a symbol table node in memory.
*
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jun 23 1997
+ * Return: Non-negative on success/Negative on failure
*
- * Modifications:
- * Robb Matzke, 1999-07-28
- * The ADDR argument is passed by value.
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Jan 15 2003
*
- * Quincey Koziol, 2002-7-180
- * Added dxpl parameter to allow more control over I/O from metadata
- * cache.
*-------------------------------------------------------------------------
*/
-static H5G_node_t *
-H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *_udata1,
- void UNUSED * _udata2)
+static herr_t
+H5G_node_dest(H5G_node_t *sym)
{
- H5G_node_t *sym = NULL;
- size_t size;
- H5WB_t *wb = NULL; /* Wrapped buffer for node data */
- uint8_t node_buf[H5G_NODE_BUF_SIZE]; /* Buffer for node */
- uint8_t *node; /* Pointer to node buffer */
- const uint8_t *p;
- H5G_node_t *ret_value; /*for error handling */
-
- FUNC_ENTER_NOAPI_NOINIT(H5G_node_load)
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_dest);
/*
* Check arguments.
*/
- HDassert(f);
- HDassert(H5F_addr_defined(addr));
- HDassert(!_udata1);
- HDassert(NULL == _udata2);
+ HDassert(sym);
- /*
- * Initialize variables.
- */
+ /* Verify that node is clean */
+ HDassert(sym->cache_info.is_dirty == FALSE);
- /* Wrap the local buffer for serialized node info */
- if(NULL == (wb = H5WB_wrap(node_buf, sizeof(node_buf))))
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, NULL, "can't wrap buffer")
+ if(sym->entry)
+ sym->entry = H5FL_SEQ_FREE(H5G_entry_t, sym->entry);
+ H5FL_FREE(H5G_node_t,sym);
- /* Compute the size of the serialized symbol table node on disk */
- size = H5G_node_size_real(f);
+ FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5G_node_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5G_node_deserialize
+ *
+ * Purpose: Deserialize the data structure from disk.
+ *
+ * Return: Success: SUCCEED
+ * Failure: FAIL
+ *
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Apr 14, 2008
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5G_node_deserialize(haddr_t UNUSED addr, size_t UNUSED len, const void *image,
+ const void *udata, hbool_t UNUSED *dirty)
+{
+ H5G_node_t *sym = NULL; /* Pointer to the deserialized symbol table node */
+ const H5F_t *f = (const H5F_t *)udata; /* Get file pointer from user data */
+ const uint8_t *p; /* Pointer into image buffer */
+ H5G_node_t *ret_value; /* Return value */
- /* Get a pointer to a buffer that's large enough for node */
- if(NULL == (node = H5WB_actual(wb, size)))
- HGOTO_ERROR(H5E_SYM, H5E_NOSPACE, NULL, "can't get actual buffer")
+ FUNC_ENTER_NOAPI_NOINIT(H5G_node_deserialize)
- /* Read the serialized symbol table node. */
- if(H5F_block_read(f, H5FD_MEM_BTREE, addr, size, dxpl_id, node) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_READERROR, NULL, "unable to read symbol table node")
+ /* check arguments */
+ HDassert(image);
+ HDassert(f);
- /* Get temporary pointer to serialized node */
- p = node;
+ /* Get temporary pointer to serialized symbol table node */
+ p = image;
/* magic */
if(HDmemcmp(p, H5G_NODE_MAGIC, (size_t)H5G_NODE_SIZEOF_MAGIC))
@@ -399,159 +401,54 @@ H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *_udata1
if(H5G_ent_decode_vec(f, &p, sym->entry, sym->nsyms) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "unable to decode symbol table entries")
+ /* Sanity check */
+ HDassert((size_t)((const uint8_t *)p - (const uint8_t *)image) <= len);
+
/* Set return value */
ret_value = sym;
done:
- /* Release resources */
- if(wb && H5WB_unwrap(wb) < 0)
- HDONE_ERROR(H5E_SYM, H5E_CLOSEERROR, NULL, "can't close wrapped buffer")
if(!ret_value)
- if(sym && H5G_node_dest(f, sym) < 0)
+ if(sym && H5G_node_dest(sym) < 0)
HDONE_ERROR(H5E_SYM, H5E_CANTFREE, NULL, "unable to destroy symbol table node")
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5G_node_load() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5G_node_flush
- *
- * Purpose: Flush a symbol table node to disk.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * matzke@llnl.gov
- * Jun 23 1997
- *
- * Modifications:
- * rky, 1998-08-28
- * Only p0 writes metadata to disk.
- *
- * Robb Matzke, 1999-07-28
- * The ADDR argument is passed by value.
- *
- * Quincey Koziol, 2002-7-180
- * Added dxpl parameter to allow more control over I/O from metadata
- * cache.
- *
- * Pedro Vicente, <pvn@ncsa.uiuc.edu> 18 Sep 2002
- * Added `id to name' support.
- *
- * JRM -- 8/21/06
- * Added the flags_ptr parameter. This parameter exists to
- * allow the flush routine to report to the cache if the
- * entry is resized or renamed as a result of the flush.
- * *flags_ptr is set to H5C_CALLBACK__NO_FLAGS_SET on entry.
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5G_node_t *sym, unsigned UNUSED * flags_ptr)
-{
- H5WB_t *wb = NULL; /* Wrapped buffer for node data */
- uint8_t node_buf[H5G_NODE_BUF_SIZE]; /* Buffer for node */
- unsigned u;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT(H5G_node_flush)
-
- /*
- * Check arguments.
- */
- HDassert(f);
- HDassert(H5F_addr_defined(addr));
- HDassert(sym);
-
- /*
- * Look for dirty entries and set the node dirty flag.
- */
- for(u = 0; u < sym->nsyms; u++)
- if(sym->entry[u].dirty) {
- /* Set the node's dirty flag */
- sym->cache_info.is_dirty = TRUE;
-
- /* Reset the entry's dirty flag */
- sym->entry[u].dirty = FALSE;
- } /* end if */
-
- /*
- * Write the symbol node to disk.
- */
- if(sym->cache_info.is_dirty) {
- uint8_t *node; /* Pointer to node buffer */
- size_t size;
-
- /* Wrap the local buffer for serialized node info */
- if(NULL == (wb = H5WB_wrap(node_buf, sizeof(node_buf))))
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't wrap buffer")
-
- /* Compute the size of the serialized symbol table node on disk */
- size = H5G_node_size_real(f);
-
- /* Get a pointer to a buffer that's large enough for node */
- if(NULL == (node = H5WB_actual(wb, size)))
- HGOTO_ERROR(H5E_SYM, H5E_NOSPACE, FAIL, "can't get actual buffer")
-
- /* Serialize symbol table node into buffer */
- if(H5G_node_serialize(f, sym, size, node) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTSERIALIZE, FAIL, "node serialization failed")
-
- /* Write the serialized symbol table node. */
- if(H5F_block_write(f, H5FD_MEM_BTREE, addr, size, dxpl_id, node) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_WRITEERROR, FAIL, "unable to write symbol table node to the file")
-
- /* Reset the node's dirty flag */
- sym->cache_info.is_dirty = FALSE;
- } /* end if */
-
- /*
- * Destroy the symbol node? This might happen if the node is being
- * preempted from the cache.
- */
- if(destroy)
- if(H5G_node_dest(f, sym) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTFREE, FAIL, "unable to destroy symbol table node")
-
-done:
- /* Release resources */
- if(wb && H5WB_unwrap(wb) < 0)
- HDONE_ERROR(H5E_SYM, H5E_CLOSEERROR, FAIL, "can't close wrapped buffer")
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5G_node_flush() */
+} /* end H5G_node_deserialize() */
/*-------------------------------------------------------------------------
* Function: H5G_node_serialize
*
- * Purpose: Serialize the symbol table node
- *
- * Return: Non-negative on success/Negative on failure
+ * Purpose: Serialize the data structure for writing to disk.
*
- * Programmer: Bill Wendling
- * wendling@ncsa.uiuc.edu
- * Sept. 16, 2003
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Modifications:
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * Mar 24, 2008
*
*-------------------------------------------------------------------------
*/
static herr_t
-H5G_node_serialize(H5F_t *f, H5G_node_t *sym, size_t size, uint8_t *buf)
+H5G_node_serialize(const H5F_t *f, haddr_t UNUSED addr, size_t UNUSED len,
+ void *image, void *_thing, unsigned *flags, haddr_t UNUSED *new_addr,
+ size_t UNUSED *new_len, void UNUSED **new_image)
{
- uint8_t *p;
- herr_t ret_value = SUCCEED;
+ H5G_node_t *sym = (H5G_node_t *)_thing; /* Pointer to the Symbol Table node */
+ size_t size; /* Size of symbol table node in file */
+ uint8_t *p; /* Pointer into image buffer */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT(H5G_node_serialize);
+ FUNC_ENTER_NOAPI_NOINIT(H5G_node_serialize)
- /* check args */
- assert(f);
- assert(sym);
- assert(buf);
+ /* check arguments */
+ HDassert(image);
+ HDassert(sym);
+ HDassert(flags);
- p = buf;
+ /* Set the local pointer into the serialized image */
+ p = image;
/* magic number */
HDmemcpy(p, H5G_NODE_MAGIC, (size_t)H5G_NODE_SIZEOF_MAGIC);
@@ -566,50 +463,53 @@ H5G_node_serialize(H5F_t *f, H5G_node_t *sym, size_t size, uint8_t *buf)
/* number of symbols */
UINT16ENCODE(p, sym->nsyms);
+ /* Compute the size of the serialized symbol table node on disk */
+ size = H5G_node_size_real(f);
+ HDassert(size);
+
/* entries */
- if (H5G_ent_encode_vec(f, &p, sym->entry, sym->nsyms) < 0)
+ if(H5G_ent_encode_vec(f, &p, sym->entry, sym->nsyms) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTENCODE, FAIL, "can't serialize")
- HDmemset(p, 0, size - (p - buf));
+ HDmemset(p, 0, size - (size_t)((const uint8_t *)p - (const uint8_t *)image));
+
+ /* Reset the cache flags for this operation (metadata not resized or renamed) */
+ *flags = 0;
+
+ /* Sanity check */
+ HDassert((size_t)((const uint8_t *)p - (const uint8_t *)image) <= len);
done:
- FUNC_LEAVE_NOAPI(ret_value);
-}
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5G_node_serialize() */
/*-------------------------------------------------------------------------
- * Function: H5G_node_dest
- *
- * Purpose: Destroy a symbol table node in memory.
+ * Function: H5G_node_free_icr
*
- * Return: Non-negative on success/Negative on failure
+ * Purpose: Destroy/release an "in core representation" of a data structure
*
- * Programmer: Quincey Koziol
- * koziol@ncsa.uiuc.edu
- * Jan 15 2003
+ * Return: Success: SUCCEED
+ * Failure: FAIL
*
- * Modifications:
+ * Programmer: Quincey Koziol
+ * koziol@hdfgroup.org
+ * May 30, 2008
*
*-------------------------------------------------------------------------
*/
static herr_t
-H5G_node_dest(H5F_t UNUSED *f, H5G_node_t *sym)
+H5G_node_free_icr(haddr_t UNUSED addr, size_t UNUSED len, void *thing)
{
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_dest);
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_free_icr)
- /*
- * Check arguments.
- */
- assert(sym);
-
- /* Verify that node is clean */
- assert (sym->cache_info.is_dirty==FALSE);
+ /* Check arguments */
+ HDassert(thing);
- if(sym->entry)
- sym->entry = H5FL_SEQ_FREE(H5G_entry_t,sym->entry);
- H5FL_FREE(H5G_node_t,sym);
+ /* Destroy B-tree node */
+ H5G_node_dest(thing);
- FUNC_LEAVE_NOAPI(SUCCEED);
-} /* end H5G_node_dest() */
+ FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5G_node_free_icr() */
/*-------------------------------------------------------------------------
@@ -623,75 +523,30 @@ H5G_node_dest(H5F_t UNUSED *f, H5G_node_t *sym)
* koziol@ncsa.uiuc.edu
* Mar 20 2003
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
static herr_t
-H5G_node_clear(H5F_t *f, H5G_node_t *sym, hbool_t destroy)
+H5G_node_clear(haddr_t UNUSED addr, size_t UNUSED len, void *_sym)
{
+ H5G_node_t *sym = (H5G_node_t *)_sym;
unsigned u; /* Local index variable */
- herr_t ret_value = SUCCEED;
- FUNC_ENTER_NOAPI_NOINIT(H5G_node_clear);
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_clear)
/*
* Check arguments.
*/
- assert(sym);
+ HDassert(sym);
/* Look for dirty entries and reset their dirty flag. */
for(u = 0; u < sym->nsyms; u++)
- sym->entry[u].dirty=FALSE;
- sym->cache_info.is_dirty = FALSE;
-
- /*
- * Destroy the symbol node? This might happen if the node is being
- * preempted from the cache.
- */
- if (destroy)
- if (H5G_node_dest(f, sym) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTFREE, FAIL, "unable to destroy symbol table node");
+ sym->entry[u].dirty = FALSE;
-done:
- FUNC_LEAVE_NOAPI(ret_value);
+ FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5G_node_clear() */
/*-------------------------------------------------------------------------
- * Function: H5G_node_size
- *
- * Purpose: Compute the size in bytes of the specified instance of
- * H5G_node_t on disk, and return it in *size_ptr. On failure
- * the value of size_ptr is undefined.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: John Mainzer
- * 5/13/04
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5G_node_size(const H5F_t *f, const H5G_node_t UNUSED *sym, size_t *size_ptr)
-{
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_size);
-
- /*
- * Check arguments.
- */
- HDassert(f);
- HDassert(size_ptr);
-
- *size_ptr = H5G_node_size_real(f);
-
- FUNC_LEAVE_NOAPI(SUCCEED);
-} /* H5G_node_size() */
-
-
-/*-------------------------------------------------------------------------
* Function: H5G_node_create
*
* Purpose: Creates a new empty symbol table node. This function is
@@ -729,16 +584,17 @@ H5G_node_create(H5F_t *f, hid_t dxpl_id, H5B_ins_t UNUSED op, void *_lt_key,
assert(H5B_INS_FIRST == op);
if(NULL == (sym = H5FL_CALLOC(H5G_node_t)))
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
size = H5G_node_size_real(f);
+ HDassert(size);
if(HADDR_UNDEF == (*addr_p = H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, size)))
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to allocate file space");
+ HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to allocate file space")
- sym->entry = H5FL_SEQ_CALLOC(H5G_entry_t, (size_t)(2 * H5F_SYM_LEAF_K(f)));
- if(NULL==sym->entry)
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- if(H5AC_set(f, dxpl_id, H5AC_SNODE, *addr_p, sym, H5AC__NO_FLAGS_SET) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to cache symbol table leaf node");
+ if(NULL == ( sym->entry = H5FL_SEQ_CALLOC(H5G_entry_t, (size_t)(2 * H5F_SYM_LEAF_K(f)))))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+ H5_CHECK_OVERFLOW(size, /* vartype */hsize_t, /* casttype */size_t);
+ if(H5AC2_set(f, dxpl_id, H5AC2_SNODE, *addr_p, (size_t)size, sym, H5AC2__NO_FLAGS_SET) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to cache symbol table leaf node")
/*
* The left and right symbols in an empty tree are both the
* empty string stored at offset zero by the H5G functions. This
@@ -933,7 +789,7 @@ H5G_node_found(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *_lt_key
/*
* Load the symbol table node for exclusive access.
*/
- if(NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
+ if(NULL == (sn = H5AC2_protect(f, dxpl_id, H5AC2_SNODE, addr, H5G_node_size_real(f), (void *)f, H5AC2_READ)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, FAIL, "unable to protect symbol table node")
/* Get base address of heap */
@@ -963,7 +819,7 @@ H5G_node_found(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *_lt_key
HGOTO_ERROR(H5E_SYM, H5E_BADITER, FAIL, "iterator callback failed")
done:
- if(sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__NO_FLAGS_SET) < 0)
+ if(sn && H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, addr, (size_t)0, sn, H5AC2__NO_FLAGS_SET) < 0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to release symbol table node")
FUNC_LEAVE_NOAPI(ret_value)
@@ -1015,7 +871,7 @@ H5G_node_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr,
H5G_node_key_t *rt_key = (H5G_node_key_t *) _rt_key;
H5G_bt_ins_t *udata = (H5G_bt_ins_t *) _udata;
H5G_node_t *sn = NULL, *snrt = NULL;
- unsigned sn_flags = H5AC__NO_FLAGS_SET, snrt_flags = H5AC__NO_FLAGS_SET;
+ unsigned sn_flags = H5AC2__NO_FLAGS_SET, snrt_flags = H5AC2__NO_FLAGS_SET;
const char *s;
const char *base; /* Base of heap */
unsigned lt = 0, rt; /* Binary search cntrs */
@@ -1039,7 +895,7 @@ H5G_node_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr,
/*
* Load the symbol node.
*/
- if(NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_WRITE)))
+ if(NULL == (sn = H5AC2_protect(f, dxpl_id, H5AC2_SNODE, addr, H5G_node_size_real(f), (void *)f, H5AC2_WRITE)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_INS_ERROR, "unable to protect symbol table node")
/* Get base address of heap */
@@ -1082,19 +938,19 @@ H5G_node_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr,
if(H5G_node_create(f, dxpl_id, H5B_INS_FIRST, NULL, NULL, NULL, new_node_p/*out*/) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, H5B_INS_ERROR, "unable to split symbol table node")
- if(NULL == (snrt = H5AC_protect(f, dxpl_id, H5AC_SNODE, *new_node_p, NULL, NULL, H5AC_WRITE)))
+ if(NULL == (snrt = H5AC2_protect(f, dxpl_id, H5AC2_SNODE, *new_node_p, H5G_node_size_real(f), (void *)f, H5AC2_WRITE)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_INS_ERROR, "unable to split symbol table node")
HDmemcpy(snrt->entry, sn->entry + H5F_SYM_LEAF_K(f),
H5F_SYM_LEAF_K(f) * sizeof(H5G_entry_t));
snrt->nsyms = H5F_SYM_LEAF_K(f);
- snrt_flags |= H5AC__DIRTIED_FLAG;
+ snrt_flags |= H5AC2__DIRTIED_FLAG;
/* The left node */
HDmemset(sn->entry + H5F_SYM_LEAF_K(f), 0,
H5F_SYM_LEAF_K(f) * sizeof(H5G_entry_t));
sn->nsyms = H5F_SYM_LEAF_K(f);
- sn_flags |= H5AC__DIRTIED_FLAG;
+ sn_flags |= H5AC2__DIRTIED_FLAG;
/* The middle key */
md_key->offset = sn->entry[sn->nsyms - 1].name_off;
@@ -1115,7 +971,7 @@ H5G_node_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr,
} else {
/* Where to insert the new entry? */
ret_value = H5B_INS_NOOP;
- sn_flags |= H5AC__DIRTIED_FLAG;
+ sn_flags |= H5AC2__DIRTIED_FLAG;
insert_into = sn;
if(idx == (int)sn->nsyms) {
rt_key->offset = ent.name_off;
@@ -1137,9 +993,9 @@ H5G_node_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr,
insert_into->nsyms += 1;
done:
- if(snrt && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, *new_node_p, snrt, snrt_flags) < 0)
+ if(snrt && H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, *new_node_p, (size_t)0, snrt, snrt_flags) < 0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to release symbol table node")
- if(sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, sn_flags) < 0)
+ if(sn && H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, addr, (size_t)0, sn, sn_flags) < 0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to release symbol table node")
FUNC_LEAVE_NOAPI(ret_value)
@@ -1184,7 +1040,7 @@ H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
H5G_node_key_t *rt_key = (H5G_node_key_t *)_rt_key;
H5G_bt_rm_t *udata = (H5G_bt_rm_t *)_udata;
H5G_node_t *sn = NULL;
- unsigned sn_flags = H5AC__NO_FLAGS_SET;
+ unsigned sn_flags = H5AC2__NO_FLAGS_SET;
unsigned lt = 0, rt, idx = 0;
int cmp = 1;
H5B_ins_t ret_value = H5B_INS_ERROR;
@@ -1199,7 +1055,7 @@ H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
HDassert(udata && udata->common.heap);
/* Load the symbol table */
- if(NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_WRITE)))
+ if(NULL == (sn = H5AC2_protect(f, dxpl_id, H5AC2_SNODE, addr, H5G_node_size_real(f), (void *)f, H5AC2_WRITE)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_INS_ERROR, "unable to protect symbol table node")
/* "Normal" removal of a single entry from the symbol table node */
@@ -1288,7 +1144,7 @@ H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
*rt_key_changed = TRUE;
sn->nsyms = 0;
if(H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, (hsize_t)H5G_node_size_real(f)) < 0
- || H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__DIRTIED_FLAG | H5C__DELETED_FLAG) < 0) {
+ || H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, addr, (size_t)0, sn, H5AC2__DIRTIED_FLAG | H5AC2__DELETED_FLAG) < 0) {
sn = NULL;
HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to free symbol table node")
} /* end if */
@@ -1302,7 +1158,7 @@ H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
* change.
*/
sn->nsyms -= 1;
- sn_flags |= H5AC__DIRTIED_FLAG;
+ sn_flags |= H5AC2__DIRTIED_FLAG;
HDmemmove(sn->entry + idx, sn->entry + idx + 1,
(sn->nsyms-idx) * sizeof(H5G_entry_t));
ret_value = H5B_INS_NOOP;
@@ -1314,7 +1170,7 @@ H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
* should be changed to reflect the new right-most entry.
*/
sn->nsyms -= 1;
- sn_flags |= H5AC__DIRTIED_FLAG;
+ sn_flags |= H5AC2__DIRTIED_FLAG;
rt_key->offset = sn->entry[sn->nsyms - 1].name_off;
*rt_key_changed = TRUE;
ret_value = H5B_INS_NOOP;
@@ -1325,7 +1181,7 @@ H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
* node.
*/
sn->nsyms -= 1;
- sn_flags |= H5AC__DIRTIED_FLAG;
+ sn_flags |= H5AC2__DIRTIED_FLAG;
HDmemmove(sn->entry + idx, sn->entry + idx + 1,
(sn->nsyms - idx) * sizeof(H5G_entry_t));
ret_value = H5B_INS_NOOP;
@@ -1360,7 +1216,7 @@ H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
*rt_key_changed = TRUE;
sn->nsyms = 0;
if(H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, (hsize_t)H5G_node_size_real(f)) < 0
- || H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__DIRTIED_FLAG | H5C__DELETED_FLAG) < 0) {
+ || H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, addr, (size_t)0, sn, H5AC2__DIRTIED_FLAG | H5AC2__DELETED_FLAG) < 0) {
sn = NULL;
HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to free symbol table node")
} /* end if */
@@ -1369,7 +1225,7 @@ H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
} /* end else */
done:
- if(sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, sn_flags) < 0)
+ if(sn && H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, addr, (size_t)0, sn, sn_flags) < 0)
HDONE_ERROR(H5E_SYM, H5E_CANTUNPROTECT, H5B_INS_ERROR, "unable to release symbol table node")
FUNC_LEAVE_NOAPI(ret_value)
@@ -1409,7 +1265,7 @@ H5G_node_iterate(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_t ad
HDassert(udata && udata->heap);
/* Protect the symbol table node & local heap while we iterate over entries */
- if(NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
+ if(NULL == (sn = H5AC2_protect(f, dxpl_id, H5AC2_SNODE, addr, H5G_node_size_real(f), (void *)f, H5AC2_READ)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5_ITER_ERROR, "unable to load symbol table node")
/*
@@ -1476,7 +1332,7 @@ H5G_node_iterate(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_t ad
done:
/* Release resources */
- if(sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__NO_FLAGS_SET) != SUCCEED)
+ if(sn && H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, addr, (size_t)0, sn, H5AC2__NO_FLAGS_SET) < 0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5_ITER_ERROR, "unable to release object header")
FUNC_LEAVE_NOAPI(ret_value)
@@ -1514,13 +1370,13 @@ H5G_node_sumup(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_t addr
HDassert(num_objs);
/* Find the object node and add the number of symbol entries. */
- if(NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
+ if(NULL == (sn = H5AC2_protect(f, dxpl_id, H5AC2_SNODE, addr, H5G_node_size_real(f), (void *)f, H5AC2_READ)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5_ITER_ERROR, "unable to load symbol table node")
*num_objs += sn->nsyms;
done:
- if(sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__NO_FLAGS_SET) != SUCCEED)
+ if(sn && H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, addr, (size_t)0, sn, H5AC2__NO_FLAGS_SET) < 0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5_ITER_ERROR, "unable to release object header")
FUNC_LEAVE_NOAPI(ret_value)
@@ -1559,7 +1415,7 @@ H5G_node_by_idx(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_t add
HDassert(udata);
/* Get a pointer to the symbol table node */
- if(NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
+ if(NULL == (sn = H5AC2_protect(f, dxpl_id, H5AC2_SNODE, addr, H5G_node_size_real(f), (void *)f, H5AC2_READ)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5_ITER_ERROR, "unable to load symbol table node");
/* Find the node, locate the object symbol table entry and retrieve the name */
@@ -1581,7 +1437,7 @@ H5G_node_by_idx(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_t add
udata->num_objs += sn->nsyms;
done:
- if(sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__NO_FLAGS_SET) != SUCCEED)
+ if(sn && H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, addr, (size_t)0, sn, H5AC2__NO_FLAGS_SET) < 0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5_ITER_ERROR, "unable to release object header")
FUNC_LEAVE_NOAPI(ret_value);
@@ -1748,7 +1604,7 @@ H5G_node_copy(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_t addr,
HDassert(udata);
/* load the symbol table into memory from the source file */
- if(NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
+ if(NULL == (sn = H5AC2_protect(f, dxpl_id, H5AC2_SNODE, addr, H5G_node_size_real(f), (void *)f, H5AC2_READ)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5_ITER_ERROR, "unable to load symbol table node")
/* get the base address of the heap */
@@ -1841,7 +1697,7 @@ done:
if (heap && H5HL_unprotect(f, dxpl_id, heap, udata->src_heap_addr) < 0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5_ITER_ERROR, "unable to unprotect symbol name")
- if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__NO_FLAGS_SET) != SUCCEED)
+ if (sn && H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, addr, (size_t)0, sn, H5AC2__NO_FLAGS_SET) < 0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5_ITER_ERROR, "unable to release object header")
FUNC_LEAVE_NOAPI(ret_value)
@@ -1883,7 +1739,7 @@ H5G_node_build_table(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_
* Save information about the symbol table node since we can't lock it
* because we're about to call an application function.
*/
- if(NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
+ if(NULL == (sn = H5AC2_protect(f, dxpl_id, H5AC2_SNODE, addr, H5G_node_size_real(f), (void *)f, H5AC2_READ)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5_ITER_ERROR, "unable to load symbol table node")
/* Check if the link table needs to be extended */
@@ -1916,7 +1772,7 @@ H5G_node_build_table(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_
done:
/* Release the locked items */
- if(sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__NO_FLAGS_SET) != SUCCEED)
+ if(sn && H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, addr, (size_t)0, sn, H5AC2__NO_FLAGS_SET) < 0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5_ITER_ERROR, "unable to release object header")
FUNC_LEAVE_NOAPI(ret_value)
@@ -1997,7 +1853,7 @@ H5G_node_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
* If we couldn't load the symbol table node, then try loading the
* B-tree node.
*/
- if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ))) {
+ if (NULL == (sn = H5AC2_protect(f, dxpl_id, H5AC2_SNODE, addr, H5G_node_size_real(f), (void *)f, H5AC2_READ))) {
H5G_bt_common_t udata; /*data to pass through B-tree */
H5E_clear_stack(NULL); /* discard that error */
@@ -2035,7 +1891,7 @@ H5G_node_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
} /* end if */
done:
- if(sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, H5AC__NO_FLAGS_SET) < 0)
+ if(sn && H5AC2_unprotect(f, dxpl_id, H5AC2_SNODE, addr, (size_t)0, sn, H5AC2__NO_FLAGS_SET) < 0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to release symbol table node")
if(heap && H5HL_unprotect(f, dxpl_id, heap, heap_addr) < 0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to unprotect symbol table heap")
diff --git a/src/H5Gpkg.h b/src/H5Gpkg.h
index f5b2582..cc017b9 100644
--- a/src/H5Gpkg.h
+++ b/src/H5Gpkg.h
@@ -32,7 +32,6 @@
#include "H5Gprivate.h"
/* Other private headers needed by this file */
-#include "H5ACprivate.h" /* Metadata cache */
#include "H5B2private.h" /* v2 B-trees */
#include "H5HFprivate.h" /* Fractal heaps */
#include "H5HLprivate.h" /* Local Heaps */
@@ -106,7 +105,6 @@ typedef struct H5G_entry_t {
H5G_cache_t cache; /*cached data from object header */
size_t name_off; /*offset of name within name heap */
haddr_t header; /*file address of object header */
- H5F_t *file; /*file to which this obj hdr belongs */
} H5G_entry_t;
/*
@@ -321,9 +319,6 @@ typedef struct {
*/
H5_DLLVAR H5B_class_t H5B_SNODE[1];
-/* The cache subclass */
-H5_DLLVAR const H5AC_class_t H5AC_SNODE[1];
-
/* The v2 B-tree class for indexing 'name' field on links */
H5_DLLVAR const H5B2_class_t H5G_BT2_NAME[1];
@@ -402,9 +397,9 @@ H5_DLL H5G_obj_t H5G_stab_get_type_by_idx(H5O_loc_t *oloc, hsize_t idx,
H5_DLL herr_t H5G_ent_copy(H5G_entry_t *dst, const H5G_entry_t *src,
H5_copy_depth_t depth);
H5_DLL herr_t H5G_ent_reset(H5G_entry_t *ent);
-H5_DLL herr_t H5G_ent_decode_vec(H5F_t *f, const uint8_t **pp,
+H5_DLL herr_t H5G_ent_decode_vec(const H5F_t *f, const uint8_t **pp,
H5G_entry_t *ent, unsigned n);
-H5_DLL herr_t H5G_ent_encode_vec(H5F_t *f, uint8_t **pp,
+H5_DLL herr_t H5G_ent_encode_vec(const H5F_t *f, uint8_t **pp,
const H5G_entry_t *ent, unsigned n);
H5_DLL herr_t H5G_ent_convert(H5F_t *f, hid_t dxpl_id, H5HL_t *heap,
const char *name, const H5O_link_t *lnk, H5G_entry_t *ent);
diff --git a/src/H5MF.c b/src/H5MF.c
index 6d44c69..ab62038 100644
--- a/src/H5MF.c
+++ b/src/H5MF.c
@@ -64,7 +64,7 @@
*-------------------------------------------------------------------------
*/
haddr_t
-H5MF_alloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
+H5MF_alloc(const H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
{
haddr_t ret_value;
@@ -118,7 +118,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5MF_xfree(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
+H5MF_xfree(const H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -234,7 +234,7 @@ done:
*-------------------------------------------------------------------------
*/
hbool_t
-H5MF_alloc_overflow(H5F_t *f, hsize_t size)
+H5MF_alloc_overflow(const H5F_t *f, hsize_t size)
{
hsize_t space_needed = 0; /* Accumulator variable */
size_t c; /* Local index variable */
diff --git a/src/H5MFprivate.h b/src/H5MFprivate.h
index 09ed582..b3f0d17 100644
--- a/src/H5MFprivate.h
+++ b/src/H5MFprivate.h
@@ -44,12 +44,12 @@
/*
* Library prototypes...
*/
-H5_DLL haddr_t H5MF_alloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
-H5_DLL herr_t H5MF_xfree(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+H5_DLL haddr_t H5MF_alloc(const H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+H5_DLL herr_t H5MF_xfree(const H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
hsize_t size);
H5_DLL haddr_t H5MF_realloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t old_addr,
hsize_t old_size, hsize_t new_size);
-H5_DLL hbool_t H5MF_alloc_overflow(H5F_t *f, hsize_t size);
+H5_DLL hbool_t H5MF_alloc_overflow(const H5F_t *f, hsize_t size);
H5_DLL htri_t H5MF_can_extend(H5F_t *f, H5FD_mem_t type, haddr_t addr,
hsize_t size, hsize_t extra_requested);
H5_DLL herr_t H5MF_extend(H5F_t *f, H5FD_mem_t type, haddr_t addr, hsize_t size,
diff --git a/src/H5private.h b/src/H5private.h
index 48fbd01..ebbad21 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -1235,18 +1235,22 @@ static herr_t H5_INTERFACE_INIT_FUNC(void);
/* Use this macro for API functions that [could] modify metadata */
#define FUNC_ENTER_API_META(func_name, id, err) {{ \
- FUNC_ENTER_API_VARS(func_name) \
- FUNC_ENTER_COMMON(func_name,H5_IS_API(#func_name)); \
- FUNC_ENTER_API_THREADSAFE; \
- FUNC_ENTER_API_COMMON(func_name,err); \
- /* Clear thread error stack entering public functions */ \
- H5E_clear_stack(NULL); \
{ \
+ /* Metadata journaling variables */ \
uint64_t trans_num = 0; \
H5O_loc_t id_oloc; \
hbool_t do_transaction = FALSE; \
hbool_t id_oloc_open = FALSE; \
hbool_t transaction_begun = FALSE; \
+ /* end - Metadata journaling variables */ \
+ \
+ FUNC_ENTER_API_VARS(func_name) \
+ FUNC_ENTER_COMMON(func_name,H5_IS_API(#func_name)); \
+ FUNC_ENTER_API_THREADSAFE; \
+ FUNC_ENTER_API_COMMON(func_name,err); \
+ /* Clear thread error stack entering public functions */ \
+ H5E_clear_stack(NULL); \
+ \
if (H5AC2_begin_transaction(id, &do_transaction, &id_oloc, \
&id_oloc_open, &transaction_begun, \
&trans_num, FUNC) < 0) { \