summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2009-03-30 17:45:30 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2009-03-30 17:45:30 (GMT)
commitf8fa1029b7e056cc068583d5f08d788aa57e3635 (patch)
tree8f209b41c99651962e067a75364ce09cd3120659 /src
parent383f266ef1df526ea3ebeadd1b49099361ada7a9 (diff)
downloadhdf5-f8fa1029b7e056cc068583d5f08d788aa57e3635.zip
hdf5-f8fa1029b7e056cc068583d5f08d788aa57e3635.tar.gz
hdf5-f8fa1029b7e056cc068583d5f08d788aa57e3635.tar.bz2
[svn-r16625] Description:
Add mechanism for querying if an entry in the metadata cache is the parent or child in a flush dependency relationship. Tested on: FreeBSD/32 6.3 (duty) in debug mode FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (jam) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode Mac OS X/32 10.5.6 (amazon) in debug mode Mac OS X/32 10.5.6 (amazon) w/C++ & FORTRAN, w/threadsafe, in production mode
Diffstat (limited to 'src')
-rw-r--r--src/H5AC.c11
-rw-r--r--src/H5ACprivate.h2
-rw-r--r--src/H5C.c20
-rw-r--r--src/H5Cprivate.h4
-rw-r--r--src/H5EAcache.c3
5 files changed, 31 insertions, 9 deletions
diff --git a/src/H5AC.c b/src/H5AC.c
index 74bed21..cf994be 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -1154,6 +1154,8 @@ H5AC_get_entry_status(H5F_t * f,
hbool_t is_dirty;
hbool_t is_protected;
hbool_t is_pinned;
+ hbool_t is_flush_dep_child;
+ hbool_t is_flush_dep_parent;
size_t entry_size;
unsigned status = 0;
@@ -1168,7 +1170,8 @@ H5AC_get_entry_status(H5F_t * f,
}
result = H5C_get_entry_status(cache_ptr, addr, &entry_size, &in_cache,
- &is_dirty, &is_protected, &is_pinned);
+ &is_dirty, &is_protected, &is_pinned, &is_flush_dep_parent,
+ &is_flush_dep_child);
if ( result < 0 ) {
@@ -1188,6 +1191,12 @@ H5AC_get_entry_status(H5F_t * f,
if ( is_pinned )
status |= H5AC_ES__IS_PINNED;
+
+ if ( is_flush_dep_parent )
+ status |= H5AC_ES__IS_FLUSH_DEP_PARENT;
+
+ if ( is_flush_dep_child )
+ status |= H5AC_ES__IS_FLUSH_DEP_CHILD;
}
*status_ptr = status;
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index b8de0c9..b84142a 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -266,6 +266,8 @@ extern hid_t H5AC_ind_dxpl_id;
#define H5AC_ES__IS_DIRTY 0x0002
#define H5AC_ES__IS_PROTECTED 0x0004
#define H5AC_ES__IS_PINNED 0x0008
+#define H5AC_ES__IS_FLUSH_DEP_PARENT 0x0010
+#define H5AC_ES__IS_FLUSH_DEP_CHILD 0x0020
/* external function declarations: */
diff --git a/src/H5C.c b/src/H5C.c
index b7d64f9..4c9c9f4 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -4535,10 +4535,12 @@ H5C_get_entry_status(H5C_t * cache_ptr,
hbool_t * in_cache_ptr,
hbool_t * is_dirty_ptr,
hbool_t * is_protected_ptr,
- hbool_t * is_pinned_ptr)
+ hbool_t * is_pinned_ptr,
+ hbool_t * is_flush_dep_parent_ptr,
+ hbool_t * is_flush_dep_child_ptr)
{
- herr_t ret_value = SUCCEED; /* Return value */
H5C_cache_entry_t * entry_ptr = NULL;
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(H5C_get_entry_status, FAIL)
@@ -4587,6 +4589,16 @@ H5C_get_entry_status(H5C_t * cache_ptr,
*is_pinned_ptr = entry_ptr->is_pinned;
}
+
+ if ( is_flush_dep_parent_ptr != NULL ) {
+
+ *is_flush_dep_parent_ptr = (entry_ptr->flush_dep_height > 0);
+ }
+
+ if ( is_flush_dep_child_ptr != NULL ) {
+
+ *is_flush_dep_child_ptr = (entry_ptr->flush_dep_parent != NULL);
+ }
}
done:
@@ -8715,8 +8727,8 @@ H5C_create_flush_dependency(H5C_t UNUSED * cache_ptr, void * parent_thing,
/* More sanity checks */
if(child_entry == parent_entry)
HGOTO_ERROR(H5E_CACHE, H5E_CANTDEPEND, FAIL, "Child entry flush dependency parent can't be itself")
- if(!parent_entry->is_protected)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTDEPEND, FAIL, "Parent entry isn't protected")
+ if(!(parent_entry->is_protected || parent_entry->is_pinned))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTDEPEND, FAIL, "Parent entry isn't pinned or protected")
if(NULL != child_entry->flush_dep_parent)
HGOTO_ERROR(H5E_CACHE, H5E_CANTDEPEND, FAIL, "Child entry already has flush dependency parent")
{
diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h
index 5d89313..b539068 100644
--- a/src/H5Cprivate.h
+++ b/src/H5Cprivate.h
@@ -1047,7 +1047,9 @@ H5_DLL herr_t H5C_get_entry_status(H5C_t * cache_ptr,
hbool_t * in_cache_ptr,
hbool_t * is_dirty_ptr,
hbool_t * is_protected_ptr,
- hbool_t * is_pinned_ptr);
+ hbool_t * is_pinned_ptr,
+ hbool_t * is_flush_dep_parent_ptr,
+ hbool_t * is_flush_dep_child_ptr);
H5_DLL herr_t H5C_get_evictions_enabled(H5C_t * cache_ptr,
hbool_t * evictions_enabled_ptr);
diff --git a/src/H5EAcache.c b/src/H5EAcache.c
index f7a7962..a2326dc 100644
--- a/src/H5EAcache.c
+++ b/src/H5EAcache.c
@@ -1703,10 +1703,7 @@ HDfprintf(stderr, "%s: addr = %a\n", FUNC, addr);
/* Verify checksum */
if(stored_chksum != computed_chksum)
-{
-HDfprintf(stderr, "%s: stored_chksum = %8x, computed_chksum = %8x\n", FUNC, stored_chksum, computed_chksum);
H5E_THROW(H5E_BADVALUE, "incorrect metadata checksum for extensible array data block page")
-}
/* Set return value */
ret_value = dblk_page;