diff options
author | James Laird <jlaird@hdfgroup.org> | 2007-01-16 17:19:11 (GMT) |
---|---|---|
committer | James Laird <jlaird@hdfgroup.org> | 2007-01-16 17:19:11 (GMT) |
commit | 8fa9daa17424a76c715f63afc35cfdcd0c3add32 (patch) | |
tree | bd278f590332535b85d6b3c37d936809717aa171 /src/H5SMcache.c | |
parent | 8e88c834ffaf3904105ff585087a09a69ed1a56f (diff) | |
download | hdf5-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.c | 40 |
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 */ |