summaryrefslogtreecommitdiffstats
path: root/src/H5SMtest.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2007-01-06 20:54:19 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2007-01-06 20:54:19 (GMT)
commit327ea3a76678ed2f92b0eb72df36c1d02651c2be (patch)
tree14b77bf71608596fc45fea60445e7d4c1559a247 /src/H5SMtest.c
parentd6c27d4b4d82d794e860770f5903e84511596d19 (diff)
downloadhdf5-327ea3a76678ed2f92b0eb72df36c1d02651c2be.zip
hdf5-327ea3a76678ed2f92b0eb72df36c1d02651c2be.tar.gz
hdf5-327ea3a76678ed2f92b0eb72df36c1d02651c2be.tar.bz2
[svn-r13116] Description:
Add support for deleting all the attributes on an object, when they are dense and possibly shared. Also, add some testing routines, for better error detection. Should fix daily test failures also... Tested on: FreeBSD/32 6.1 (duty)
Diffstat (limited to 'src/H5SMtest.c')
-rw-r--r--src/H5SMtest.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/H5SMtest.c b/src/H5SMtest.c
index d2ca5d3..20a23e9 100644
--- a/src/H5SMtest.c
+++ b/src/H5SMtest.c
@@ -194,3 +194,58 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5SM_get_refcount_test() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5SM_get_mesg_count_test
+ *
+ * Purpose: Retrieve the number of messages tracked of a certain type
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * Wednesday, January 3, 2007
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5SM_get_mesg_count_test(H5F_t *f, hid_t dxpl_id, unsigned type_id,
+ size_t *mesg_count)
+{
+ H5SM_master_table_t *table = NULL; /* SOHM master table */
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT(H5SM_get_mesg_count_test)
+
+ /* Sanity check */
+ HDassert(f);
+ HDassert(mesg_count);
+
+ /* Check for shared messages being enabled */
+ if(H5F_addr_defined(f->shared->sohm_addr)) {
+ H5SM_index_header_t *header; /* Index header for message type */
+ ssize_t index_num; /* Table index for message type */
+
+ /* Look up the master SOHM table */
+ if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, NULL, NULL, H5AC_READ)))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, FAIL, "unable to load SOHM master table")
+
+ /* Find the correct index and try to delete from it */
+ if((index_num = H5SM_get_index(table, type_id)) < 0)
+ HGOTO_ERROR(H5E_SOHM, H5E_NOTFOUND, FAIL, "unable to find correct SOHM index")
+ header = &(table->indexes[index_num]);
+
+ /* Set the message count for the type */
+ *mesg_count = header->num_messages;
+ } /* end if */
+ else
+ /* No shared messages of any type */
+ *mesg_count = 0;
+
+done:
+ /* Release resources */
+ if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, table, H5AC__NO_FLAGS_SET) < 0)
+ HDONE_ERROR(H5E_CACHE, H5E_CANTRELEASE, FAIL, "unable to close SOHM master table")
+
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5SM_get_mesg_count_test() */
+