summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/H5AC.c5
-rw-r--r--src/H5ACprivate.h1
-rw-r--r--src/H5C.c19
-rw-r--r--src/H5Cprivate.h1
4 files changed, 22 insertions, 4 deletions
diff --git a/src/H5AC.c b/src/H5AC.c
index 3f5fc83..185ede6 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -944,6 +944,7 @@ H5AC_get_entry_status(const H5F_t *f,
hbool_t is_dirty;
hbool_t is_protected;
hbool_t is_pinned;
+ hbool_t is_corked;
hbool_t is_flush_dep_child;
hbool_t is_flush_dep_parent;
size_t entry_size;
@@ -956,7 +957,7 @@ H5AC_get_entry_status(const H5F_t *f,
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad param(s) on entry.")
if(H5C_get_entry_status(f, addr, &entry_size, &in_cache, &is_dirty,
- &is_protected, &is_pinned, &is_flush_dep_parent, &is_flush_dep_child) < 0)
+ &is_protected, &is_pinned, &is_corked, &is_flush_dep_parent, &is_flush_dep_child) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "H5C_get_entry_status() failed.")
if(in_cache) {
@@ -967,6 +968,8 @@ H5AC_get_entry_status(const H5F_t *f,
status |= H5AC_ES__IS_PROTECTED;
if(is_pinned)
status |= H5AC_ES__IS_PINNED;
+ if(is_corked)
+ status |= H5AC_ES__IS_CORKED;
if(is_flush_dep_parent)
status |= H5AC_ES__IS_FLUSH_DEP_PARENT;
if(is_flush_dep_child)
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index 2fa8277..b78c277 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -352,6 +352,7 @@ H5_DLLVAR hid_t H5AC_ind_dxpl_id;
#define H5AC_ES__IS_PINNED 0x0008
#define H5AC_ES__IS_FLUSH_DEP_PARENT 0x0010
#define H5AC_ES__IS_FLUSH_DEP_CHILD 0x0020
+#define H5AC_ES__IS_CORKED 0x0040
/* external function declarations: */
diff --git a/src/H5C.c b/src/H5C.c
index 87a100a..9fb4317 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -2469,6 +2469,7 @@ H5C_get_entry_status(const H5F_t *f,
hbool_t * is_dirty_ptr,
hbool_t * is_protected_ptr,
hbool_t * is_pinned_ptr,
+ hbool_t * is_corked_ptr,
hbool_t * is_flush_dep_parent_ptr,
hbool_t * is_flush_dep_child_ptr)
{
@@ -2529,6 +2530,11 @@ H5C_get_entry_status(const H5F_t *f,
*is_pinned_ptr = entry_ptr->is_pinned;
}
+ if ( is_corked_ptr != NULL ) {
+
+ *is_corked_ptr = entry_ptr->is_corked;
+ }
+
if ( is_flush_dep_parent_ptr != NULL ) {
*is_flush_dep_parent_ptr = (entry_ptr->flush_dep_nchildren > 0);
@@ -7008,6 +7014,7 @@ H5C__autoadjust__ageout__evict_aged_out_entries(H5F_t * f,
( (entry_ptr->type)->id != H5C__EPOCH_MARKER_TYPE ) &&
( bytes_evicted < eviction_size_limit ) )
{
+ hbool_t corked = FALSE;
HDassert( ! (entry_ptr->is_protected) );
next_ptr = entry_ptr->next;
@@ -7018,7 +7025,11 @@ H5C__autoadjust__ageout__evict_aged_out_entries(H5F_t * f,
prev_is_dirty = prev_ptr->is_dirty;
}
- if ( entry_ptr->is_dirty ) {
+ /* dirty corked entry is skipped */
+ if(entry_ptr->is_corked && entry_ptr->is_dirty) {
+ corked = TRUE;
+ result = TRUE;
+ } else if ( entry_ptr->is_dirty ) {
result = H5C_flush_single_entry(f,
primary_dxpl_id,
@@ -7058,9 +7069,11 @@ H5C__autoadjust__ageout__evict_aged_out_entries(H5F_t * f,
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
"*prev_ptr corrupt")
- } else
+ }
#endif /* NDEBUG */
- if ( ( prev_ptr->is_dirty != prev_is_dirty )
+ if(corked) { /* dirty corked entry is skipped */
+ entry_ptr = prev_ptr;
+ } else if ( ( prev_ptr->is_dirty != prev_is_dirty )
||
( prev_ptr->next != next_ptr )
||
diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h
index 3ee74ea..6890c70 100644
--- a/src/H5Cprivate.h
+++ b/src/H5Cprivate.h
@@ -1166,6 +1166,7 @@ H5_DLL herr_t H5C_get_entry_status(const H5F_t *f,
hbool_t * is_dirty_ptr,
hbool_t * is_protected_ptr,
hbool_t * is_pinned_ptr,
+ hbool_t * is_corked_ptr,
hbool_t * is_flush_dep_parent_ptr,
hbool_t * is_flush_dep_child_ptr);