summaryrefslogtreecommitdiffstats
path: root/src/H5SMcache.c
diff options
context:
space:
mode:
authorJames Laird <jlaird@hdfgroup.org>2007-01-16 17:19:11 (GMT)
committerJames Laird <jlaird@hdfgroup.org>2007-01-16 17:19:11 (GMT)
commit8fa9daa17424a76c715f63afc35cfdcd0c3add32 (patch)
treebd278f590332535b85d6b3c37d936809717aa171 /src/H5SMcache.c
parent8e88c834ffaf3904105ff585087a09a69ed1a56f (diff)
downloadhdf5-8fa9daa17424a76c715f63afc35cfdcd0c3add32.zip
hdf5-8fa9daa17424a76c715f63afc35cfdcd0c3add32.tar.gz
hdf5-8fa9daa17424a76c715f63afc35cfdcd0c3add32.tar.bz2
[svn-r13143] Refactoring.
Added can_share callback for OH messages. This determines whether the message is allowed to be shared in the heap (committed and immutable datatypes can't be). Fixed a bug in the dense attribute storage that tried to open the shared message heap when it hadn't been created yet. Made the test to extend shared dataspace messages a bit more robust. Refactored the code the searches a shared message list index to be a little more efficient. A few other minor changes. Tested on smirom, kagiso, Windows, and juniper.
Diffstat (limited to 'src/H5SMcache.c')
-rw-r--r--src/H5SMcache.c40
1 files changed, 20 insertions, 20 deletions
diff --git a/src/H5SMcache.c b/src/H5SMcache.c
index 1031a5c..1447fc9 100644
--- a/src/H5SMcache.c
+++ b/src/H5SMcache.c
@@ -32,11 +32,6 @@
/****************/
/* Local Macros */
/****************/
-/* JAMES: should this change according to address size?
- Answer: shouldn't use this ever anyway.
- */
-#define H5F_LISTBUF_SIZE H5SM_LIST_SIZEOF_MAGIC + H5O_SHMESG_MAX_LIST_SIZE * 16
-
#define H5SM_LIST_VERSION 0 /* Verion of Shared Object Header Message List Indexes */
/******************/
@@ -80,6 +75,9 @@ const H5AC_class_t H5AC_SOHM_LIST[1] = {{
(H5AC_size_func_t) H5SM_list_size,
}};
+/* Declare a free list to manage data to/from disk */
+H5FL_BLK_DEFINE_STATIC(shared_mesg_cache);
+
/*****************************/
/* Library Private Variables */
/*****************************/
@@ -123,8 +121,8 @@ H5SM_flush_table(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5SM_ma
/* Encode the master table and all of the index headers as one big blob */
size = H5SM_TABLE_SIZE(f) + (H5SM_INDEX_HEADER_SIZE(f) * table->num_indexes);
- /* Allocate the buffer */ /* JAMES: use H5FL_BLK_MALLOC instead? */
- if(NULL == (buf = H5MM_malloc(size)))
+ /* Allocate the buffer */
+ if(NULL == (buf = H5FL_BLK_MALLOC(shared_mesg_cache, size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
/* Encode the master table */
@@ -167,7 +165,8 @@ H5SM_flush_table(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5SM_ma
done:
/* Free buffer if allocated */
- buf = H5MM_xfree(buf);
+ if(buf)
+ H5FL_BLK_FREE(shared_mesg_cache, buf);
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5SM_flush_table */
@@ -217,8 +216,8 @@ H5SM_load_table(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *udata1
*/
table_size = H5SM_TABLE_SIZE(f) + (table->num_indexes * H5SM_INDEX_HEADER_SIZE(f));
- /* Allocate temporary buffer */ /* JAMES: FL_BLK? */
- if(NULL == (buf = H5MM_malloc(table_size)))
+ /* Allocate temporary buffer */
+ if(NULL == (buf = H5FL_BLK_MALLOC(shared_mesg_cache, table_size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
/* Read header from disk */
@@ -273,7 +272,8 @@ H5SM_load_table(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *udata1
done:
/* Free buffer if allocated */
- buf = H5MM_xfree(buf);
+ if(buf)
+ H5FL_BLK_FREE(shared_mesg_cache, buf);
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5SM_load_table */
@@ -411,9 +411,8 @@ H5SM_flush_list(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5SM_lis
size = H5SM_LIST_SIZE(f, list->header->num_messages);
/* Allocate temporary buffer */
- /* JAMES: is BLK_MALLOC somehow better for this? */
- if(NULL == (buf = H5MM_malloc(size)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ if(NULL == (buf = H5FL_BLK_MALLOC(shared_mesg_cache, size)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
/* Encode the list */
p = buf;
@@ -454,7 +453,8 @@ H5SM_flush_list(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5SM_lis
done:
/* Free buffer if allocated */
- buf = H5MM_xfree(buf);
+ if(buf)
+ H5FL_BLK_FREE(shared_mesg_cache, buf);
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5SM_flush_list */
@@ -490,7 +490,7 @@ H5SM_load_list(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *udata1,
HDassert(header);
- /* Allocate space for the SOHM list data structure and initialize list JAMES don't need to initialize all of list */
+ /* Allocate space for the SOHM list data structure */
if(NULL == (list = H5FL_MALLOC(H5SM_list_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
HDmemset(&list->cache_info, 0, sizeof(H5AC_info_t));
@@ -505,8 +505,7 @@ H5SM_load_list(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *udata1,
size = H5SM_LIST_SIZE(f, header->num_messages);
/* Allocate temporary buffer */
- /* JAMES: is BLK_MALLOC somehow better for this? */
- if(NULL == (buf = H5MM_malloc(size)))
+ if(NULL == (buf = H5FL_BLK_MALLOC(shared_mesg_cache, size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
/* Read list from disk */
@@ -551,7 +550,8 @@ H5SM_load_list(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *udata1,
ret_value = list;
done:
/* Free buffer if allocated */
- buf = H5MM_xfree(buf);
+ if(buf)
+ H5FL_BLK_FREE(shared_mesg_cache, buf);
if(ret_value == NULL) {
if(list) {
@@ -653,7 +653,7 @@ H5SM_list_size(const H5F_t UNUSED *f, const H5SM_list_t *list, size_t *size_ptr)
HDassert(size_ptr);
/* Set size value */
- *size_ptr = H5SM_LIST_SIZE(f, list->header->list_max); /* JAMES: might want to have variable-sized lists */
+ *size_ptr = H5SM_LIST_SIZE(f, list->header->list_max);
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5SM_list_size */