summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/H5AC.c160
-rw-r--r--src/H5ACpkg.h14
-rw-r--r--src/H5ACprivate.h4
-rw-r--r--src/H5C.c97
-rw-r--r--src/H5Cprivate.h19
-rw-r--r--test/cache.c1682
-rw-r--r--test/cache_common.c88
-rw-r--r--test/cache_common.h4
-rw-r--r--testpar/t_cache.c756
9 files changed, 1512 insertions, 1312 deletions
diff --git a/src/H5AC.c b/src/H5AC.c
index d08c7df..798c0b5 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -465,6 +465,10 @@ H5AC_term_interface(void)
* Added code to set the prefix if required.
*
* JRM - 1/20/06
+ *
+ * Added code to initialize the new write_done field.
+ *
+ * JRM - 5/11/06
*
*-------------------------------------------------------------------------
*/
@@ -568,6 +572,7 @@ H5AC_create(const H5F_t *f,
aux_ptr->d_slist_len = 0;
aux_ptr->c_slist_ptr = NULL;
aux_ptr->c_slist_len = 0;
+ aux_ptr->write_done = NULL;
sprintf(prefix, "%d:", mpi_rank);
}
@@ -863,6 +868,9 @@ done:
* bug in PHDF5. See the header comments on the H5AC_aux_t
* structure for details.
*
+ * JRM -- 5/11/06
+ * Added call to the write_done callback.
+ *
*-------------------------------------------------------------------------
*/
herr_t
@@ -936,6 +944,12 @@ H5AC_flush(H5F_t *f, hid_t dxpl_id, unsigned flags)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush.")
}
+
+ if ( aux_ptr->write_done != NULL ) {
+
+ (aux_ptr->write_done)();
+ }
+
} /* end if ( aux_ptr->mpi_rank == 0 ) */
status = H5AC_propagate_flushed_and_still_clean_entries_list(f,
@@ -1199,9 +1213,6 @@ done:
* If the entry has changed size, the function updates
* data structures for the size change.
*
- * If the entry is not already dirty, the function places
- * the entry on the skip list.
- *
* Return: Non-negative on success/Negative on failure
*
* Programmer: John Mainzer
@@ -1260,7 +1271,7 @@ H5AC_mark_pinned_entry_dirty(H5F_t * f,
if ( result < 0 ) {
- HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
"H5AC_log_dirtied_entry() failed.")
}
}
@@ -1285,6 +1296,82 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5AC_mark_pinned_or_protected_entry_dirty
+ *
+ * Purpose: Mark a pinned or protected entry as dirty. The target
+ * entry MUST be either pinned, protected, or both.
+ *
+ * Unlike H5AC_mark_pinned_entry_dirty(), this function does
+ * not support size changes.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 5/16/06
+ *
+ * Modifications:
+ *
+ * None
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC_mark_pinned_or_protected_entry_dirty(H5F_t * f,
+ void * thing)
+{
+ H5C_t * cache_ptr = f->shared->cache;
+#ifdef H5_HAVE_PARALLEL
+ H5AC_info_t * info_ptr;
+#endif /* H5_HAVE_PARALLEL */
+ herr_t result;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(H5AC_mark_pinned_or_protected_entry_dirty, FAIL)
+
+#ifdef H5_HAVE_PARALLEL
+
+ HDassert( cache_ptr );
+ HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+ HDassert( thing );
+
+ info_ptr = (H5AC_info_t *)thing;
+
+ if ( ( info_ptr->is_dirty == FALSE ) &&
+ ( ! ( info_ptr->is_protected ) ) &&
+ ( info_ptr->is_pinned ) &&
+ ( NULL != cache_ptr->aux_ptr) ) {
+
+ result = H5AC_log_dirtied_entry(cache_ptr,
+ info_ptr,
+ info_ptr->addr,
+ FALSE,
+ 0);
+
+ if ( result < 0 ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
+ "H5AC_log_dirtied_entry() failed.")
+ }
+ }
+#endif /* H5_HAVE_PARALLEL */
+
+ result = H5C_mark_pinned_or_protected_entry_dirty(cache_ptr, thing);
+
+ if ( result < 0 ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
+ "H5C_mark_pinned_entry_dirty() failed.")
+
+ }
+
+done:
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_mark_pinned_entry_dirty() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5AC_rename
*
* Purpose: Use this function to notify the cache that an object's
@@ -1664,6 +1751,11 @@ done:
* as it can effect dirty byte creation counts, thereby
* throwing the caches out of sync in the PHDF5 case.
*
+ * JRM - 5/16/06
+ * Added code to use the new dirtied field in
+ * H5C_cache_entry_t in the test to see if the entry has
+ * been dirtied.
+ *
*-------------------------------------------------------------------------
*/
herr_t
@@ -1691,7 +1783,8 @@ H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
HDassert( ((H5AC_info_t *)thing)->addr == addr );
HDassert( ((H5AC_info_t *)thing)->type == type );
- dirtied = ((flags & H5AC__DIRTIED_FLAG) == H5AC__DIRTIED_FLAG );
+ dirtied = ( ( (flags & H5AC__DIRTIED_FLAG) == H5AC__DIRTIED_FLAG ) ||
+ ( ((H5AC_info_t *)thing)->dirtied ) );
if ( dirtied ) {
@@ -1783,6 +1876,55 @@ done:
/*-------------------------------------------------------------------------
+ * Function: HA5C_set_write_done_callback
+ *
+ * Purpose: Set the value of the write_done callback. This callback
+ * is used to improve performance of the parallel test bed
+ * for the cache.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 5/11/06
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef H5_HAVE_PARALLEL
+herr_t
+H5AC_set_write_done_callback(H5C_t * cache_ptr,
+ void (* write_done)(void))
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+ H5AC_aux_t * aux_ptr = NULL;
+
+ FUNC_ENTER_NOAPI(H5AC_set_write_done_callback, FAIL)
+
+ /* This would normally be an assert, but we need to use an HGOTO_ERROR
+ * call to shut up the compiler.
+ */
+ if ( ( ! cache_ptr ) || ( cache_ptr->magic != H5C__H5C_T_MAGIC ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr")
+ }
+
+ aux_ptr = cache_ptr->aux_ptr;
+
+ HDassert( aux_ptr != NULL );
+ HDassert( aux_ptr->magic == H5AC__H5AC_AUX_T_MAGIC );
+
+ aux_ptr->write_done = write_done;
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_set_write_done_callback() */
+#endif /* H5_HAVE_PARALLEL */
+
+
+/*-------------------------------------------------------------------------
* Function: H5AC_stats
*
* Purpose: Prints statistics about the cache.
@@ -3410,6 +3552,9 @@ done:
*
* Modifications:
*
+ * JRM -- 5/11/06
+ * Added code to call the write_done callback.
+ *
*-------------------------------------------------------------------------
*/
@@ -3476,6 +3621,11 @@ H5AC_propagate_flushed_and_still_clean_entries_list(H5F_t * f,
"H5C_flush_to_min_clean() failed.")
}
+ if ( aux_ptr->write_done != NULL ) {
+
+ (aux_ptr->write_done)();
+ }
+
if ( H5AC_broadcast_clean_list(cache_ptr) < 0 ) {
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
diff --git a/src/H5ACpkg.h b/src/H5ACpkg.h
index 903eca3..e31f245 100644
--- a/src/H5ACpkg.h
+++ b/src/H5ACpkg.h
@@ -263,6 +263,18 @@
* contain the value 0 on all processes other than process 0.
* It exists primarily for sanity checking.
*
+ * write_done: In the parallel test bed, it is necessary to ensure that
+ * all writes to the server process from cache 0 complete
+ * before it enters the barrier call with the other caches.
+ *
+ * The write_done callback allows t_cache to do this without
+ * requiring an ACK on each write. Since these ACKs greatly
+ * increase the run time on some platforms, this is a
+ * significant optimization.
+ *
+ * This field must be set to NULL when the callback is not
+ * needed.
+ *
****************************************************************************/
#ifdef H5_HAVE_PARALLEL
@@ -308,6 +320,8 @@ typedef struct H5AC_aux_t
int32_t c_slist_len;
+ void (* write_done)(void);
+
} H5AC_aux_t; /* struct H5AC_aux_t */
#endif /* H5_HAVE_PARALLEL */
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index 6638be4..6dcd88c 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -261,10 +261,14 @@ H5_DLL herr_t H5AC_mark_pinned_entry_dirty(H5F_t * f,
void * thing,
hbool_t size_changed,
size_t new_size);
+H5_DLL herr_t H5AC_mark_pinned_or_protected_entry_dirty(H5F_t * f,
+ void * thing);
H5_DLL herr_t H5AC_rename(H5F_t *f, const H5AC_class_t *type,
haddr_t old_addr, haddr_t new_addr);
H5_DLL herr_t H5AC_dest(H5F_t *f, hid_t dxpl_id);
+H5_DLL herr_t H5AC_set_write_done_callback(H5C_t * cache_ptr,
+ void (* write_done)(void));
H5_DLL herr_t H5AC_stats(const H5F_t *f);
H5_DLL herr_t H5AC_get_cache_auto_resize_config(H5AC_t * cache_ptr,
diff --git a/src/H5C.c b/src/H5C.c
index fcc9e49..15fc671 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -2607,6 +2607,7 @@ H5C_create(size_t max_cache_size,
((cache_ptr->epoch_markers)[i]).size = (size_t)0;
((cache_ptr->epoch_markers)[i]).type = &epoch_marker_class;
((cache_ptr->epoch_markers)[i]).is_dirty = FALSE;
+ ((cache_ptr->epoch_markers)[i]).dirtied = FALSE;
((cache_ptr->epoch_markers)[i]).is_protected = FALSE;
((cache_ptr->epoch_markers)[i]).is_pinned = FALSE;
((cache_ptr->epoch_markers)[i]).in_slist = FALSE;
@@ -3732,6 +3733,10 @@ done:
* Added initialization for the new is_pinned field of the
* H5C_cache_entry_t structure.
*
+ * JRM -- 5/3/06
+ * Added initialization for the new dirtied field of the
+ * H5C_cache_entry_t structure.
+ *
*-------------------------------------------------------------------------
*/
@@ -3789,6 +3794,9 @@ H5C_insert_entry(H5F_t * f,
/* newly inserted entries are assumed to be dirty */
entry_ptr->is_dirty = TRUE;
+ /* not protected, so can't be dirtied */
+ entry_ptr->dirtied = FALSE;
+
if ( (type->size)(f, thing, &(entry_ptr->size)) < 0 ) {
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGETSIZE, FAIL, \
@@ -4364,6 +4372,79 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5C_mark_pinned_or_protected_entry_dirty
+ *
+ * Purpose: Mark a pinned or protected entry as dirty. The target entry
+ * MUST be either pinned or protected, and MAY be both.
+ *
+ * At present, this funtion does not support size change.
+ *
+ * In the protected case, this call is the functional
+ * equivalent of setting the H5C__DIRTIED_FLAG on an unprotect
+ * call.
+ *
+ * In the pinned but not protected case, if the entry is not
+ * already dirty, the function places function marks the entry
+ * dirty and places it on the skip list.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 5/15/06
+ *
+ * Modifications:
+ *
+ * None
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_mark_pinned_or_protected_entry_dirty(H5C_t * cache_ptr,
+ void * thing)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+ H5C_cache_entry_t * entry_ptr;
+
+ FUNC_ENTER_NOAPI(H5C_mark_pinned_or_protected_entry_dirty, FAIL)
+
+ HDassert( cache_ptr );
+ HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+ HDassert( thing );
+
+ entry_ptr = (H5C_cache_entry_t *)thing;
+
+ if ( entry_ptr->is_protected ) {
+
+ /* set the dirtied flag */
+ entry_ptr->dirtied = TRUE;
+
+ } else if ( entry_ptr->is_pinned ) {
+
+ /* mark the entry as dirty if it isn't already */
+ entry_ptr->is_dirty = TRUE;
+
+
+ if ( ! (entry_ptr->in_slist) ) {
+
+ H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr)
+ }
+
+ H5C__UPDATE_STATS_FOR_DIRTY_PIN(cache_ptr, entry_ptr)
+
+ } else {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTMARKDIRTY, FAIL, \
+ "Entry is neither pinned nor protected??")
+ }
+
+done:
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_mark_pinned_or_protected_entry_dirty() */
+
+
+/*-------------------------------------------------------------------------
*
* Function: H5C_rename_entry
*
@@ -4621,6 +4702,10 @@ done:
* JRM -- 10/22/05
* Hand optimizations.
*
+ * JRM -- 5/3/06
+ * Added code to set the new dirtied field in
+ * H5C_cache_entry_t to FALSE prior to return.
+ *
*-------------------------------------------------------------------------
*/
@@ -4791,6 +4876,8 @@ H5C_protect(H5F_t * f,
entry_ptr->is_protected = TRUE;
+ entry_ptr->dirtied = FALSE;
+
ret_value = thing;
H5C__UPDATE_CACHE_HIT_RATE_STATS(cache_ptr, hit)
@@ -5857,6 +5944,11 @@ done:
* Unpdated function to pin and unpin entries as directed via
* the new H5C__PIN_ENTRY_FLAG and H5C__UNPIN_ENTRY_FLAG flags.
*
+ * JRM -- 5/3/06
+ * Added code to make use of the new dirtied field in
+ * H5C_cache_entry_t. If this field is TRUE, it is the
+ * equivalent of setting the H5C__DIRTIED_FLAG.
+ *
*-------------------------------------------------------------------------
*/
herr_t
@@ -5910,6 +6002,11 @@ H5C_unprotect(H5F_t * f,
HDassert( entry_ptr->addr == addr );
HDassert( entry_ptr->type == type );
+ /* also set the dirtied variable if the dirtied field is set in
+ * the entry.
+ */
+ dirtied |= entry_ptr->dirtied;
+
#if H5C_DO_EXTREME_SANITY_CHECKS
if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h
index 43a93b3..bdcf501 100644
--- a/src/H5Cprivate.h
+++ b/src/H5Cprivate.h
@@ -234,6 +234,21 @@ typedef herr_t (*H5C_log_flush_func_t)(H5C_t * cache_ptr,
* modules using the cache. These still clear the
* is_dirty field as before. -- JRM 7/5/05
*
+ * dirtied: Boolean flag used to indicate that the entry has been
+ * dirtied while protected.
+ *
+ * This field is set to FALSE in the protect call, and may
+ * be set to TRUE by the
+ * H5C_mark_pinned_or_protected_entry_dirty()
+ * call at an time prior to the unprotect call.
+ *
+ * The H5C_mark_pinned_or_protected_entry_dirty() call exists
+ * as a convenience function for the fractal heap code which
+ * may not know if an entry is protected or pinned, but knows
+ * that is either protected or pinned. The dirtied field was
+ * added as in the parallel case, it is necessary to know
+ * whether a protected entry was dirty prior to the protect call.
+ *
* is_protected: Boolean flag indicating whether this entry is protected
* (or locked, to use more conventional terms). When it is
* protected, the entry cannot be flushed or accessed until
@@ -401,6 +416,7 @@ typedef struct H5C_cache_entry_t
size_t size;
const H5C_class_t * type;
hbool_t is_dirty;
+ hbool_t dirtied;
hbool_t is_protected;
hbool_t is_pinned;
hbool_t in_slist;
@@ -835,6 +851,9 @@ H5_DLL herr_t H5C_mark_pinned_entry_dirty(H5C_t * cache_ptr,
hbool_t size_changed,
size_t new_size);
+H5_DLL herr_t H5C_mark_pinned_or_protected_entry_dirty(H5C_t * cache_ptr,
+ void * thing);
+
H5_DLL herr_t H5C_rename_entry(H5C_t * cache_ptr,
const H5C_class_t * type,
haddr_t old_addr,
diff --git a/test/cache.c b/test/cache.c
index 0accf1e..68adc17 100644
--- a/test/cache.c
+++ b/test/cache.c
@@ -61,17 +61,19 @@ static void check_flush_cache__single_entry_test(H5C_t * cache_ptr,
hbool_t expected_flushed,
hbool_t expected_destroyed);
static void check_flush_cache__pinned_single_entry_test(H5C_t * cache_ptr,
- int test_num,
- int entry_type,
- int entry_idx,
- hbool_t dirty_flag,
- hbool_t mark_dirty,
- hbool_t unprotect_unpin,
- unsigned int flags,
- unsigned int flush_flags,
- hbool_t expected_cleared,
- hbool_t expected_flushed,
- hbool_t expected_destroyed);
+ int test_num,
+ int entry_type,
+ int entry_idx,
+ hbool_t dirty_flag,
+ hbool_t mark_dirty,
+ hbool_t pop_mark_dirty_prot,
+ hbool_t pop_mark_dirty_pinned,
+ hbool_t unprotect_unpin,
+ unsigned int flags,
+ unsigned int flush_flags,
+ hbool_t expected_cleared,
+ hbool_t expected_flushed,
+ hbool_t expected_destroyed);
static void check_flush_protected_err(void);
static void check_get_entry_status(void);
static void check_rename_entry(void);
@@ -87,7 +89,7 @@ static void check_double_unpin_err(void);
static void check_pin_entry_errs(void);
static void check_double_protect_err(void);
static void check_double_unprotect_err(void);
-static void check_mark_pinned_entry_dirty_errs(void);
+static void check_mark_entry_dirty_errs(void);
static void check_auto_cache_resize(void);
static void check_auto_cache_resize_disable(void);
static void check_auto_cache_resize_epoch_markers(void);
@@ -4403,6 +4405,11 @@ check_flush_cache__pe_multi_entry_test(H5C_t * cache_ptr,
* JRM -- 3/29/06
* Added tests for pinned entries.
*
+ * JRM -- 5/17/06
+ * Complete reqrite of pinned entry tests to accomodate
+ * the new H5C_mark_pinned_or_protected_entry_dirty()
+ * call.
+ *
*-------------------------------------------------------------------------
*/
@@ -5688,1244 +5695,361 @@ check_flush_cache__single_entry(H5C_t * cache_ptr)
*
* 3) Marked dirty by call to H5C_mark_pinned_entry_dirty() or not.
*
- * 4) Entry marked for flush or not.
+ * 4) Marked dirty by call to H5C_mark_pinned_or_protected_entry_dirty()
+ * while protected or not.
+ *
+ * 5) Marked dirty by call to H5C_mark_pinned_or_protected_entry_dirty()
+ * while pinned or not.
+ *
+ * 6) Entry marked for flush or not.
+ *
+ * 7) Call flush with H5C__FLUSH_MARKED_ENTRIES_FLAG or not.
+ *
+ * 8) Call flush with H5C__FLUSH_CLEAR_ONLY_FLAG or not.
+ *
+ * This yields a total of 256 tests.
+ *
+ * The tests and their expected results are given in the spec table
+ * below. The values assigned to the expected_cleared, expected_flushed,
+ * and expected_destroyed fields are somewhat arcane, so the following
+ * overview may be useful.
+ *
+ * In addition to simply checking to see if the test case runs,
+ * we also check to see if the desired operations take place on the
+ * cache entry. Thus expected_cleared is set to TRUE if we expect
+ * the entry to be flushed, expected_flushed is set to TRUE if we
+ * we expect the entry to be flushed, and expected_destroyed is set
+ * to TRUE if we expect the entry to be destroyed.
*
- * 5) Call flush with H5C__FLUSH_MARKED_ENTRIES_FLAG or not.
+ * In this test, we are working with pinned entries which can't be
+ * evicted, so expected_destroyed is always FALSE. We could pull it
+ * from the table, but it is a hold over from the code this test
+ * was adapted from, and it doesn't do any particular harm.
*
- * 6) Call flush with H5C__FLUSH_CLEAR_ONLY_FLAG or not.
+ * In general, we expect an entry to be flushed if it is dirty, and
+ * flush in invoked WITHOUT the H5C__FLUSH_CLEAR_ONLY_FLAG. However,
+ * there are exceptions: If flush is invoked with the
+ * H5C__FLUSH_MARKED_ENTRIES_FLAG, only marked entries will be flushed.
*
- * This yields a total of 64 tests.
+ * Further, unprotecting an entry with the H5C__SET_FLUSH_MARKER_FLAG
+ * will NOT mark the entry unless the entry has either been marked
+ * dirty either before or durting the unprotect call. This results in
+ * some counterintuitive entries in the table. It make be useful to
+ * look in the test code to see the exact order of operations.
+ *
+ * Similarly, we expect an entry to be cleared if it is dirty, and
+ * flush is invoked WITH the H5C__FLUSH_CLEAR_ONLY_FLAG. Again, there
+ * are exceptions -- If flush is also invoked with the
+ * H5C__FLUSH_MARKED_ENTRIES_FLAG, only the marked entries will be
+ * cleared.
+ *
+ * The above comments about applying unprotect with the
+ * H5C__SET_FLUSH_MARKER_FLAG apply here as well.
*/
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 1,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 2,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 3,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 4,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 5,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 6,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 7,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 8,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 9,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 10,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 11,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 12,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 13,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 14,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 15,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 16,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__NO_FLAGS_SET,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 17,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
if ( pass ) {
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 18,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 19,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 20,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 21,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 22,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 23,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 24,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 25,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 26,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 27,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 28,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 29,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE, /* can't mark a clean entry */
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 30,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE, /* can't makr a clean entry */
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 31,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 32,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ TRUE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 33,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 34,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 35,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 36,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 37,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 38,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 39,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 40,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 41,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 42,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 43,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 44,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 45,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 46,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 47,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 48,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 49,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 50,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 51,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 52,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 53,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 54,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 55,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 56,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__NO_FLAGS_SET,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 57,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 58,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 59,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 60,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ FALSE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 61,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE, /* can't mark a clean entry */
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 62,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ FALSE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ FALSE,
- /* expected_flushed */ FALSE, /* can't makr a clean entry */
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 63,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ FALSE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
- }
-
- if ( pass ) {
-
- check_flush_cache__pinned_single_entry_test
- (
- /* cache_ptr */ cache_ptr,
- /* test_num */ 64,
- /* entry_type */ PICO_ENTRY_TYPE,
- /* entry_idx */ 0,
- /* dirty_flag */ TRUE,
- /* mark_dirty */ TRUE,
- /* unprotect_unpin */ TRUE,
- /* flags */ H5C__SET_FLUSH_MARKER_FLAG,
- /* flush_flags */ H5C__FLUSH_MARKED_ENTRIES_FLAG |
- H5C__FLUSH_CLEAR_ONLY_FLAG,
- /* expected_cleared */ TRUE,
- /* expected_flushed */ FALSE,
- /* expected_destroyed */ FALSE
- );
+ int i;
+ struct pinned_single_entry_test_spec
+ {
+ int test_num;
+ int entry_type;
+ int entry_idx;
+ hbool_t dirty_flag;
+ hbool_t mark_dirty;
+ hbool_t pop_mark_dirty_prot;
+ hbool_t pop_mark_dirty_pinned;
+ hbool_t unprotect_unpin;
+ unsigned int flags;
+ unsigned int flush_flags;
+ hbool_t expected_cleared;
+ hbool_t expected_flushed;
+ hbool_t expected_destroyed;
+ } spec[256] =
+ /* pop pop
+ * ent mark mark
+ * test entry -ry dirty mark dirty dirty unprot flush expect expect expect
+ * num type idx flag dirty prot pinned unpin flags flags clear flush destroy
+ */
+ { { 1, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, FALSE, FALSE },
+ { 2, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, FALSE, FALSE },
+ { 3, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 4, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 5, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 6, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 7, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 8, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 9, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 10, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 11, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 12, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 13, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 14, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 15, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 16, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 17, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 18, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 19, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 20, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 21, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 22, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 23, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 24, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 25, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 26, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 27, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 28, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 29, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 30, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 31, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 32, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 33, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, FALSE, FALSE },
+ { 34, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, FALSE, FALSE },
+ { 35, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 36, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 37, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 38, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 39, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 40, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 41, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 42, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 43, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 44, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 45, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 46, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 47, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 48, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 49, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 50, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 51, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 52, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 53, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 54, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 55, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 56, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 57, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 58, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 59, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 60, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 61, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 62, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 63, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 64, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__NO_FLAGS_SET, FALSE, TRUE, FALSE },
+ { 65, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 66, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 67, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 68, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 69, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 70, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 71, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 72, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 73, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 74, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 75, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 76, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 77, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 78, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 79, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 80, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 81, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 82, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 83, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 84, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 85, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 86, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 87, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 88, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 89, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 90, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 91, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 92, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 93, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 94, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 95, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 96, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 97, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 98, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 99, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 100, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 101, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 102, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 103, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 104, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 105, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 106, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 107, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 108, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, FALSE, FALSE },
+ { 109, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 110, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 111, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 112, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 113, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 114, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 115, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 116, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 117, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 118, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 119, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 120, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 121, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 122, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 123, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 124, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 125, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 126, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 127, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 128, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG, FALSE, TRUE, FALSE },
+ { 129, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 130, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 131, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 132, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 133, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 134, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 135, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 136, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 137, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 138, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 139, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 140, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 141, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 142, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 143, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 144, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 145, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 146, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 147, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 148, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 149, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 150, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 151, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 152, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 153, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 154, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 155, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 156, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 157, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 158, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 159, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 160, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 161, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 162, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 163, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 164, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 165, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 166, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 167, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 168, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 169, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 170, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 171, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 172, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 173, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 174, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 175, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 176, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 177, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 178, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 179, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 180, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 181, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 182, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 183, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 184, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 185, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 186, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 187, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 188, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 189, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 190, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 191, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 192, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 193, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 194, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 195, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 196, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 197, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 198, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 199, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 200, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 201, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 202, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 203, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 204, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 205, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 206, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 207, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 208, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 209, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 210, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 211, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 212, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 213, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 214, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 215, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 216, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 217, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 218, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 219, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 220, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 221, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 222, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 223, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 224, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C__NO_FLAGS_SET, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 225, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 226, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 227, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 228, PICO_ENTRY_TYPE, 0, FALSE, FALSE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 229, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 230, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 231, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 232, PICO_ENTRY_TYPE, 0, FALSE, FALSE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 233, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 234, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 235, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 236, PICO_ENTRY_TYPE, 0, FALSE, TRUE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, FALSE, FALSE, FALSE },
+ { 237, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 238, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 239, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 240, PICO_ENTRY_TYPE, 0, FALSE, TRUE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 241, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 242, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 243, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 244, PICO_ENTRY_TYPE, 0, TRUE, FALSE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 245, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 246, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 247, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 248, PICO_ENTRY_TYPE, 0, TRUE, FALSE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 249, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 250, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 251, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 252, PICO_ENTRY_TYPE, 0, TRUE, TRUE, FALSE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 253, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 254, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, FALSE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 255, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, FALSE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE },
+ { 256, PICO_ENTRY_TYPE, 0, TRUE, TRUE, TRUE, TRUE, TRUE, H5C__SET_FLUSH_MARKER_FLAG, H5C__FLUSH_MARKED_ENTRIES_FLAG | H5C__FLUSH_CLEAR_ONLY_FLAG, TRUE, FALSE, FALSE } };
+
+ i = 0;
+ while ( ( pass ) && ( i < 256 ) )
+ {
+ check_flush_cache__pinned_single_entry_test
+ (
+ /* cache_ptr */ cache_ptr,
+ /* test_num */ spec[i].test_num,
+ /* entry_type */ spec[i].entry_type,
+ /* entry_idx */ spec[i].entry_idx,
+ /* dirty_flag */ spec[i].dirty_flag,
+ /* mark_dirty */ spec[i].mark_dirty,
+ /* pop_mark_dirty_prot */ spec[i].pop_mark_dirty_prot,
+ /* pop_mark_dirty_pinned */ spec[i].pop_mark_dirty_pinned,
+ /* unprotect_unpin */ spec[i].unprotect_unpin,
+ /* flags */ spec[i].flags,
+ /* flush_flags */ spec[i].flush_flags,
+ /* expected_cleared */ spec[i].expected_cleared,
+ /* expected_flushed */ spec[i].expected_flushed,
+ /* expected_destroyed */ spec[i].expected_destroyed
+ );
+ i++;
+ }
}
return;
@@ -7122,6 +6246,14 @@ check_flush_cache__single_entry_test(H5C_t * cache_ptr,
*
* Modifications:
*
+ * JRM -- 5/17/06
+ * Added the pop_mark_dirty_prot and pop_mark_dirty_pinned
+ * flags and supporting code to allow us to test the
+ * H5C_mark_pinned_or_protected_entry_dirty() call. Use the
+ * call to mark the entry dirty while the entry is protected
+ * if pop_mark_dirty_prot is TRUE, and to mark the entry
+ * dirty while it is pinned if pop_mark_dirty_pinned is TRUE.
+ *
*-------------------------------------------------------------------------
*/
@@ -7132,6 +6264,8 @@ check_flush_cache__pinned_single_entry_test(H5C_t * cache_ptr,
int entry_idx,
hbool_t dirty_flag,
hbool_t mark_dirty,
+ hbool_t pop_mark_dirty_prot,
+ hbool_t pop_mark_dirty_pinned,
hbool_t unprotect_unpin,
unsigned int flags,
unsigned int flush_flags,
@@ -7168,7 +6302,7 @@ check_flush_cache__pinned_single_entry_test(H5C_t * cache_ptr,
pass = FALSE;
HDsnprintf(msg, (size_t)128,
- "Bad parameters on entry to single entry test #%d.",
+ "Bad parameters on entry to pinned single entry test #%d.",
test_num);
failure_mssg = msg;
}
@@ -7180,6 +6314,13 @@ check_flush_cache__pinned_single_entry_test(H5C_t * cache_ptr,
protect_entry(cache_ptr, entry_type, entry_idx);
+ if ( pop_mark_dirty_prot ) {
+
+ mark_pinned_or_protected_entry_dirty(cache_ptr,
+ entry_type,
+ entry_idx);
+ }
+
unprotect_entry(cache_ptr, entry_type, entry_idx,
(int)dirty_flag, (flags | H5C__PIN_ENTRY_FLAG));
@@ -7188,6 +6329,13 @@ check_flush_cache__pinned_single_entry_test(H5C_t * cache_ptr,
mark_pinned_entry_dirty(cache_ptr, entry_type, entry_idx,
FALSE, (size_t)0);
}
+
+ if ( pop_mark_dirty_pinned ) {
+
+ mark_pinned_or_protected_entry_dirty(cache_ptr,
+ entry_type,
+ entry_idx);
+ }
}
if ( pass ) {
@@ -7220,7 +6368,7 @@ check_flush_cache__pinned_single_entry_test(H5C_t * cache_ptr,
pass = FALSE;
HDsnprintf(msg, (size_t)128,
- "Unexpected entry status after flush in single entry test #%d.",
+ "Unexpected entry status after flush in pinned single entry test #%d.",
test_num);
failure_mssg = msg;
}
@@ -7276,8 +6424,8 @@ check_flush_cache__pinned_single_entry_test(H5C_t * cache_ptr,
pass = FALSE;
HDsnprintf(msg, (size_t)128,
- "Flush failed on cleanup in single entry test #%d.",
- test_num);
+ "Flush failed on cleanup in pinned single entry test #%d.",
+ test_num);
failure_mssg = msg;
}
else if ( ( cache_ptr->index_len != 0 ) ||
@@ -7300,7 +6448,7 @@ check_flush_cache__pinned_single_entry_test(H5C_t * cache_ptr,
return;
-} /* check_flush_cache__single_entry_test() */
+} /* check_flush_cache__pinned_single_entry_test() */
/*-------------------------------------------------------------------------
@@ -8713,7 +7861,7 @@ check_double_unprotect_err(void)
/*-------------------------------------------------------------------------
- * Function: check_mark_pinned_entry_dirty_errs()
+ * Function: check_mark_entry_dirty_errs()
*
* Purpose: Verify that:
*
@@ -8723,10 +7871,14 @@ check_double_unprotect_err(void)
* 2) a call to H5C_mark_pinned_entry_dirty with a protected
* entry as the target will generate an error.
*
+ * 3) a call to H5C_mark_pinned_or_protected_entry_dirty with
+ * and unpinned and unprotected entry will generate an
+ * error.
+ *
* Return: void
*
* Programmer: John Mainzer
- * 4/25/06
+ * 5/17/06
*
* Modifications:
*
@@ -8736,14 +7888,14 @@ check_double_unprotect_err(void)
*/
static void
-check_mark_pinned_entry_dirty_errs(void)
+check_mark_entry_dirty_errs(void)
{
- const char * fcn_name = "check_mark_pinned_entry_dirty_errs()";
+ const char * fcn_name = "check_mark_entry_dirty_errs()";
herr_t result;
H5C_t * cache_ptr = NULL;
test_entry_t * entry_ptr;
- TESTING("mark pinned entry dirty related errors");
+ TESTING("mark entry dirty related errors");
pass = TRUE;
@@ -8753,6 +7905,9 @@ check_mark_pinned_entry_dirty_errs(void)
* Then unprotect the entry without pinning it, and try to mark it dirty
* again -- this should fail too.
*
+ * Try it again using H5C_mark_pinned_or_protected_entry_dirty -- this
+ * should fail as well.
+ *
* Destroy the cache -- should succeed.
*/
@@ -8799,8 +7954,21 @@ check_mark_pinned_entry_dirty_errs(void)
pass = FALSE;
failure_mssg =
- "attempt dirty a unpinned and unprotected entry succeeded.\n";
+ "attempt to dirty a unpinned and unprotected entry succeeded 1.\n";
+ }
+ }
+
+ if ( pass ) {
+
+ result = H5C_mark_pinned_or_protected_entry_dirty(cache_ptr,
+ (void *)entry_ptr);
+
+
+ if ( result > 0 ) {
+ pass = FALSE;
+ failure_mssg =
+ "attempt to dirty a unpinned and unprotected entry succeeded 2.\n";
}
}
@@ -8819,7 +7987,7 @@ check_mark_pinned_entry_dirty_errs(void)
return;
-} /* check_mark_pinned_entry_dirty_errs() */
+} /* check_mark_entry_dirty_errs() */
/*-------------------------------------------------------------------------
@@ -17242,7 +16410,7 @@ check_auto_cache_resize_aux_fcns(void)
H5C_auto_size_ctl_t auto_size_ctl =
{
/* int32_t version = */ H5C__CURR_AUTO_SIZE_CTL_VER,
-#if 0
+#if 1
/* H5C_auto_resize_report_fcn rpt_fcn = */ NULL,
#else
/* H5C_auto_resize_report_fcn rpt_fcn = */ H5C_def_auto_resize_rpt_fcn,
@@ -17839,7 +17007,7 @@ main(void)
check_pin_entry_errs();
check_double_protect_err();
check_double_unprotect_err();
- check_mark_pinned_entry_dirty_errs();
+ check_mark_entry_dirty_errs();
check_auto_cache_resize();
check_auto_cache_resize_disable();
check_auto_cache_resize_epoch_markers();
diff --git a/test/cache_common.c b/test/cache_common.c
index 26bddf0..aeb9a25 100644
--- a/test/cache_common.c
+++ b/test/cache_common.c
@@ -1686,6 +1686,94 @@ mark_pinned_entry_dirty(H5C_t * cache_ptr,
/*-------------------------------------------------------------------------
+ * Function: mark_pinned_or_protected_entry_dirty()
+ *
+ * Purpose: Mark the specified entry as dirty.
+ *
+ * Do nothing if pass is FALSE on entry.
+ *
+ * Return: void
+ *
+ * Programmer: John Mainzer
+ * 5/17/06
+ *
+ * Modifications:
+ *
+ * None.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void
+mark_pinned_or_protected_entry_dirty(H5C_t * cache_ptr,
+ int32_t type,
+ int32_t idx)
+{
+ const char * fcn_name = "mark_pinned_or_protected_entry_dirty()";
+ herr_t result;
+ test_entry_t * base_addr;
+ test_entry_t * entry_ptr;
+
+ if ( pass ) {
+
+ HDassert( cache_ptr );
+ HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
+ HDassert( ( 0 <= idx ) && ( idx <= max_indices[type] ) );
+
+ base_addr = entries[type];
+ entry_ptr = &(base_addr[idx]);
+
+ HDassert( entry_ptr->index == idx );
+ HDassert( entry_ptr->type == type );
+ HDassert( entry_ptr == entry_ptr->self );
+ HDassert( entry_ptr->cache_ptr == cache_ptr );
+ HDassert( entry_ptr->header.is_protected ||
+ entry_ptr->header.is_pinned );
+
+ entry_ptr->is_dirty = TRUE;
+
+ result = H5C_mark_pinned_or_protected_entry_dirty(cache_ptr,
+ (void *)entry_ptr);
+
+ if ( ( result < 0 )
+ ||
+ ( ( ! (entry_ptr->header.is_protected) )
+ &&
+ ( ! (entry_ptr->header.is_pinned) )
+ )
+ ||
+ ( ( entry_ptr->header.is_protected )
+ &&
+ ( ! ( entry_ptr->header.dirtied ) )
+ )
+ ||
+ ( ( ! ( entry_ptr->header.is_protected ) )
+ &&
+ ( ! ( entry_ptr->header.is_dirty ) )
+ )
+ ||
+ ( entry_ptr->header.type != &(types[type]) )
+ ||
+ ( entry_ptr->size != entry_ptr->header.size )
+ ||
+ ( entry_ptr->addr != entry_ptr->header.addr ) ) {
+
+ pass = FALSE;
+ failure_mssg =
+ "error in H5C_mark_pinned_or_protected_entry_dirty().";
+
+ }
+
+ HDassert( ((entry_ptr->header).type)->id == type );
+
+ }
+
+ return;
+
+} /* mark_pinned_or_protected_entry_dirty() */
+
+
+/*-------------------------------------------------------------------------
* Function: rename_entry()
*
* Purpose: Rename the entry indicated by the type and index to its
diff --git a/test/cache_common.h b/test/cache_common.h
index ac58b1a..9186840 100644
--- a/test/cache_common.h
+++ b/test/cache_common.h
@@ -435,6 +435,10 @@ void mark_pinned_entry_dirty(H5C_t * cache_ptr,
hbool_t size_changed,
size_t new_size);
+void mark_pinned_or_protected_entry_dirty(H5C_t * cache_ptr,
+ int32_t type,
+ int32_t idx);
+
void rename_entry(H5C_t * cache_ptr,
int32_t type,
int32_t idx,
diff --git a/testpar/t_cache.c b/testpar/t_cache.c
index 8b119b8..3bacb8e 100644
--- a/testpar/t_cache.c
+++ b/testpar/t_cache.c
@@ -224,15 +224,21 @@ int data_index[NUM_DATA_ENTRIES];
*
*****************************************************************************/
+#define DO_WRITE_REQ_ACK FALSE
+#define DO_SYNC_AFTER_WRITE TRUE
+
#define WRITE_REQ_CODE 0
-#define READ_REQ_CODE 1
-#define READ_REQ_REPLY_CODE 2
-#define DONE_REQ_CODE 3
-#define MAX_REQ_CODE 3
+#define WRITE_REQ_ACK_CODE 1
+#define READ_REQ_CODE 2
+#define READ_REQ_REPLY_CODE 3
+#define SYNC_REQ_CODE 4
+#define SYNC_ACK_CODE 5
+#define DONE_REQ_CODE 6
+#define MAX_REQ_CODE 6
#define MSSG_MAGIC 0x1248
-typedef struct mssg_t
+struct mssg_t
{
int req;
int src;
@@ -270,13 +276,14 @@ void init_data(void);
/* test coodination related functions */
int do_express_test(void);
+void do_sync(void);
int get_max_nerrors(void);
/* mssg xfer related functions */
-hbool_t recv_mssg(struct mssg_t *mssg_ptr);
-hbool_t send_mssg(struct mssg_t *mssg_ptr);
+hbool_t recv_mssg(struct mssg_t *mssg_ptr, int mssg_tag_offset);
+hbool_t send_mssg(struct mssg_t *mssg_ptr, hbool_t add_req_to_tag);
hbool_t setup_derived_types(void);
hbool_t takedown_derived_types(void);
@@ -285,6 +292,7 @@ hbool_t takedown_derived_types(void);
hbool_t server_main(void);
hbool_t serve_read_request(struct mssg_t * mssg_ptr);
+hbool_t serve_sync_request(struct mssg_t * mssg_ptr);
hbool_t serve_write_request(struct mssg_t * mssg_ptr);
@@ -336,6 +344,9 @@ void lock_and_unlock_random_entry(H5C_t * cache_ptr, H5F_t * file_ptr,
void lock_entry(H5C_t * cache_ptr, H5F_t * file_ptr, int32_t idx);
void mark_pinned_entry_dirty(H5C_t * cache_ptr, H5F_t * file_ptr,
int32_t idx, hbool_t size_changed, size_t new_size);
+void mark_pinned_or_protected_entry_dirty(H5C_t * cache_ptr,
+ H5F_t * file_ptr,
+ int32_t idx);
void pin_entry(H5C_t * cache_ptr, H5F_t * file_ptr, int32_t idx,
hbool_t global, hbool_t dirty);
void rename_entry(H5C_t * cache_ptr, H5F_t * file_ptr,
@@ -357,6 +368,7 @@ hbool_t smoke_check_1(void);
hbool_t smoke_check_2(void);
hbool_t smoke_check_3(void);
hbool_t smoke_check_4(void);
+hbool_t smoke_check_5(void);
/*****************************************************************************/
@@ -648,7 +660,7 @@ addr_to_datum_index(haddr_t base_addr)
/*****************************************************************************
*
- * Function: init_data_array()
+ * Function: init_data()
*
* Purpose: Initialize the data array, from which cache entries are
* loaded.
@@ -777,6 +789,85 @@ do_express_test(void)
/*****************************************************************************
*
+ * Function: do_sync()
+ *
+ * Purpose: Ensure that all messages sent by this process have been
+ * processed before proceeding.
+ *
+ * Do this by exchanging sync req / sync ack messages with
+ * the server.
+ *
+ * Do nothing if nerrors is greater than zero.
+ *
+ * Return: void
+ *
+ * Programmer: JRM -- 5/10/06
+ *
+ * Modifications:
+ *
+ * None.
+ *
+ *****************************************************************************/
+
+void
+do_sync(void)
+{
+ const char * fcn_name = "do_sync()";
+
+ herr_t ret_value = SUCCEED;
+ struct mssg_t mssg;
+
+ if ( nerrors <= 0 ) {
+
+ /* compose the message */
+ mssg.req = SYNC_REQ_CODE;
+ mssg.src = world_mpi_rank;
+ mssg.dest = world_server_mpi_rank;
+ mssg.mssg_num = -1; /* set by send function */
+ mssg.base_addr = 0;
+ mssg.len = 0;
+ mssg.ver = 0;
+ mssg.magic = MSSG_MAGIC;
+
+ if ( ! send_mssg(&mssg, FALSE) ) {
+
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: send_mssg() failed.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+ }
+
+ if ( nerrors <= 0 ) {
+
+ if ( ! recv_mssg(&mssg, SYNC_ACK_CODE) ) {
+
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: recv_mssg() failed.\n",
+ world_mpi_rank, fcn_name);
+ }
+ } else if ( ( mssg.req != SYNC_ACK_CODE ) ||
+ ( mssg.src != world_server_mpi_rank ) ||
+ ( mssg.dest != world_mpi_rank ) ||
+ ( mssg.magic != MSSG_MAGIC ) ) {
+
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: Bad data in sync ack.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+ }
+
+ return;
+
+} /* do_sync() */
+
+
+/*****************************************************************************
+ *
* Function: get_max_nerrors()
*
* Purpose: Do an MPI_Allreduce to obtain the maximum value of nerrors
@@ -843,34 +934,42 @@ get_max_nerrors(void)
*
* Modifications:
*
- * None.
+ * JRM -- 5/10/06
+ * Added mssg_tag_offset parameter and supporting code.
*
*****************************************************************************/
#define CACHE_TEST_TAG 99 /* different from any used by the library */
hbool_t
-recv_mssg(struct mssg_t *mssg_ptr)
+recv_mssg(struct mssg_t *mssg_ptr,
+ int mssg_tag_offset)
{
const char * fcn_name = "recv_mssg()";
hbool_t success = TRUE;
+ int mssg_tag = CACHE_TEST_TAG;
int result;
MPI_Status status;
- if ( mssg_ptr == NULL ) {
+ if ( ( mssg_ptr == NULL ) ||
+ ( mssg_tag_offset < 0 ) ||
+ ( mssg_tag_offset> MAX_REQ_CODE ) ) {
nerrors++;
success = FALSE;
if ( verbose ) {
- HDfprintf(stdout, "%d:%s: NULL mssg_ptr on entry.\n",
+ HDfprintf(stdout, "%d:%s: bad param(s) on entry.\n",
world_mpi_rank, fcn_name);
}
+ } else {
+
+ mssg_tag += mssg_tag_offset;
}
if ( success ) {
result = MPI_Recv((void *)mssg_ptr, 1, mpi_mssg_t, MPI_ANY_SOURCE,
- CACHE_TEST_TAG, world_mpi_comm, &status);
+ mssg_tag, world_mpi_comm, &status);
if ( result != MPI_SUCCESS ) {
@@ -922,15 +1021,18 @@ recv_mssg(struct mssg_t *mssg_ptr)
*
* Modifications:
*
- * None.
+ * JRM -- 5/10/06
+ * Added the add_req_to_tag parameter and supporting code.
*
*****************************************************************************/
hbool_t
-send_mssg(struct mssg_t *mssg_ptr)
+send_mssg(struct mssg_t *mssg_ptr,
+ hbool_t add_req_to_tag)
{
const char * fcn_name = "send_mssg()";
hbool_t success = TRUE;
+ int mssg_tag = CACHE_TEST_TAG;
int result;
static long mssg_num = 0;
@@ -955,8 +1057,13 @@ send_mssg(struct mssg_t *mssg_ptr)
mssg_ptr->mssg_num = mssg_num++;
+ if ( add_req_to_tag ) {
+
+ mssg_tag += mssg_ptr->req;
+ }
+
result = MPI_Send((void *)mssg_ptr, 1, mpi_mssg_t,
- mssg_ptr->dest, CACHE_TEST_TAG, world_mpi_comm);
+ mssg_ptr->dest, mssg_tag, world_mpi_comm);
if ( result != MPI_SUCCESS ) {
@@ -1134,7 +1241,8 @@ takedown_derived_types(void)
*
* Modifications:
*
- * None.
+ * JRM -- 5/10/06
+ * Updated for sync message.
*
*****************************************************************************/
@@ -1160,7 +1268,7 @@ server_main(void)
while ( ( success ) && ( ! done ) )
{
- success = recv_mssg(&mssg);
+ success = recv_mssg(&mssg, 0);
if ( success ) {
@@ -1170,6 +1278,11 @@ server_main(void)
success = serve_write_request(&mssg);
break;
+ case WRITE_REQ_ACK_CODE:
+ success = FALSE;
+ HDfprintf(stdout, "%s: Received write ack?!?.\n", fcn_name);
+ break;
+
case READ_REQ_CODE:
success = serve_read_request(&mssg);
break;
@@ -1180,6 +1293,16 @@ server_main(void)
fcn_name);
break;
+ case SYNC_REQ_CODE:
+ success = serve_sync_request(&mssg);
+ break;
+
+ case SYNC_ACK_CODE:
+ success = FALSE;
+ HDfprintf(stdout, "%s: Received sync ack?!?.\n",
+ fcn_name);
+ break;
+
case DONE_REQ_CODE:
done_count++;
/* HDfprintf(stdout, "%d:%s: done_count = %d.\n",
@@ -1280,9 +1403,11 @@ serve_read_request(struct mssg_t * mssg_ptr)
success = FALSE;
if ( verbose ) {
HDfprintf(stdout,
- "%d:%s: proc %d read invalid entry. base_addr = %a.\n",
+ "%d:%s: proc %d read invalid entry. idx/base_addr = %d/%a.\n",
world_mpi_rank, fcn_name,
- mssg_ptr->src, data[target_index].base_addr);
+ mssg_ptr->src, target_index,
+ target_index,
+ data[target_index].base_addr);
}
} else {
@@ -1300,7 +1425,7 @@ serve_read_request(struct mssg_t * mssg_ptr)
if ( success ) {
- success = send_mssg(&reply);
+ success = send_mssg(&reply, TRUE);
}
return(success);
@@ -1310,6 +1435,74 @@ serve_read_request(struct mssg_t * mssg_ptr)
/*****************************************************************************
*
+ * Function: serve_sync_request()
+ *
+ * Purpose: Serve a sync request.
+ *
+ * The function accepts a pointer to an instance of struct
+ * mssg_t as input. If all sanity checks pass, it sends a
+ * sync ack to the requesting process.
+ *
+ * This service exist to allow the sending process to ensure
+ * that all previous messages have been processed before
+ * proceeding.
+ *
+ * Return: Success: TRUE
+ *
+ * Failure: FALSE
+ *
+ * Programmer: JRM -- 5/10/06
+ *
+ * Modifications:
+ *
+ * None.
+ *
+ *****************************************************************************/
+
+hbool_t
+serve_sync_request(struct mssg_t * mssg_ptr)
+{
+ const char * fcn_name = "serve_sync_request()";
+ hbool_t success = TRUE;
+ struct mssg_t reply;
+
+ if ( ( mssg_ptr == NULL ) ||
+ ( mssg_ptr->req != SYNC_REQ_CODE ) ||
+ ( mssg_ptr->magic != MSSG_MAGIC ) ) {
+
+ nerrors++;
+ success = FALSE;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: Bad mssg on entry.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+
+ if ( success ) {
+
+ /* compose the reply message */
+ reply.req = SYNC_ACK_CODE;
+ reply.src = world_mpi_rank;
+ reply.dest = mssg_ptr->src;
+ reply.mssg_num = -1; /* set by send function */
+ reply.base_addr = 0;
+ reply.len = 0;
+ reply.ver = 0;
+ reply.magic = MSSG_MAGIC;
+ }
+
+ if ( success ) {
+
+ success = send_mssg(&reply, TRUE);
+ }
+
+ return(success);
+
+} /* serve_sync_request() */
+
+
+/*****************************************************************************
+ *
* Function: serve_write_request()
*
* Purpose: Serve a write request.
@@ -1327,7 +1520,10 @@ serve_read_request(struct mssg_t * mssg_ptr)
*
* Modifications:
*
- * None.
+ * JRM -- 5/9/06
+ * Added code supporting a write ack message. This is a
+ * speculative fix to a bug observed on Cobalt. If it
+ * doesn't work, it will help narrow down the possibilities.
*
*****************************************************************************/
@@ -1339,6 +1535,9 @@ serve_write_request(struct mssg_t * mssg_ptr)
int target_index;
int new_ver_num;
haddr_t target_addr;
+#if DO_WRITE_REQ_ACK
+ struct mssg_t reply;
+#endif /* DO_WRITE_REQ_ACK */
if ( ( mssg_ptr == NULL ) ||
( mssg_ptr->req != WRITE_REQ_CODE ) ||
@@ -1396,8 +1595,27 @@ serve_write_request(struct mssg_t * mssg_ptr)
if ( success ) {
+ /* process the write */
data[target_index].ver = new_ver_num;
data[target_index].valid = TRUE;
+
+#if DO_WRITE_REQ_ACK
+
+ /* compose the reply message */
+ reply.req = WRITE_REQ_ACK_CODE;
+ reply.src = world_mpi_rank;
+ reply.dest = mssg_ptr->src;
+ reply.mssg_num = -1; /* set by send function */
+ reply.base_addr = data[target_index].base_addr;
+ reply.len = data[target_index].len;
+ reply.ver = data[target_index].ver;
+ reply.magic = MSSG_MAGIC;
+
+ /* and send it */
+ success = send_mssg(&reply, TRUE);
+
+#endif /* DO_WRITE_REQ_ACK */
+
}
return(success);
@@ -1531,6 +1749,12 @@ destroy_datum(H5F_t UNUSED * f,
*
* Modifications:
*
+ * JRM -- 5/9/06
+ * Added code to receive the write request ack messages
+ * from the server. This is part of a speculative fix to
+ * a bug spotted on Cobalt. If it doesn't fix the problem,
+ * it will narrow down the possibilities.
+ *
*-------------------------------------------------------------------------
*/
@@ -1585,7 +1809,7 @@ flush_datum(H5F_t *f,
mssg.ver = entry_ptr->ver;
mssg.magic = MSSG_MAGIC;
- if ( ! send_mssg(&mssg) ) {
+ if ( ! send_mssg(&mssg, FALSE) ) {
nerrors++;
ret_value = FAIL;
@@ -1602,6 +1826,37 @@ flush_datum(H5F_t *f,
}
}
+#if DO_WRITE_REQ_ACK
+
+ if ( ( ret_value == SUCCEED ) && ( entry_ptr->header.is_dirty ) ) {
+
+ if ( ! recv_mssg(&mssg, WRITE_REQ_ACK_CODE) ) {
+
+ nerrors++;
+ ret_value = FAIL;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: recv_mssg() failed.\n",
+ world_mpi_rank, fcn_name);
+ }
+ } else if ( ( mssg.req != WRITE_REQ_ACK_CODE ) ||
+ ( mssg.src != world_server_mpi_rank ) ||
+ ( mssg.dest != world_mpi_rank ) ||
+ ( mssg.base_addr != entry_ptr->base_addr ) ||
+ ( mssg.len != entry_ptr->len ) ||
+ ( mssg.ver != entry_ptr->ver ) ||
+ ( mssg.magic != MSSG_MAGIC ) ) {
+
+ nerrors++;
+ ret_value = FAIL;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: Bad data in write req ack.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+ }
+
+#endif /* DO_WRITE_REQ_ACK */
+
if ( ret_value == SUCCEED ) {
if ( dest ) {
@@ -1673,7 +1928,7 @@ load_datum(H5F_t UNUSED *f,
mssg.ver = 0; /* bogus -- should be corrected by server */
mssg.magic = MSSG_MAGIC;
- if ( ! send_mssg(&mssg) ) {
+ if ( ! send_mssg(&mssg, FALSE) ) {
nerrors++;
success = FALSE;
@@ -1685,7 +1940,7 @@ load_datum(H5F_t UNUSED *f,
if ( success ) {
- if ( ! recv_mssg(&mssg) ) {
+ if ( ! recv_mssg(&mssg, READ_REQ_REPLY_CODE) ) {
nerrors++;
success = FALSE;
@@ -1712,6 +1967,58 @@ load_datum(H5F_t UNUSED *f,
HDfprintf(stdout, "%d:%s: Bad data in read req reply.\n",
world_mpi_rank, fcn_name);
}
+#if 0 /* This has been useful debugging code -- keep it for now. */
+ if ( mssg.req != READ_REQ_REPLY_CODE ) {
+
+ HDfprintf(stdout, "%d:%s: mssg.req != READ_REQ_REPLY_CODE.\n",
+ world_mpi_rank, fcn_name);
+ HDfprintf(stdout, "%d:%s: mssg.req = %d.\n",
+ world_mpi_rank, fcn_name, (int)(mssg.req));
+ }
+
+ if ( mssg.src != world_server_mpi_rank ) {
+
+ HDfprintf(stdout, "%d:%s: mssg.src != world_server_mpi_rank.\n",
+ world_mpi_rank, fcn_name);
+ }
+
+ if ( mssg.dest != world_mpi_rank ) {
+
+ HDfprintf(stdout, "%d:%s: mssg.dest != world_mpi_rank.\n",
+ world_mpi_rank, fcn_name);
+ }
+
+ if ( mssg.base_addr != entry_ptr->base_addr ) {
+
+ HDfprintf(stdout,
+ "%d:%s: mssg.base_addr != entry_ptr->base_addr.\n",
+ world_mpi_rank, fcn_name);
+ HDfprintf(stdout, "%d:%s: mssg.base_addr = %a.\n",
+ world_mpi_rank, fcn_name, mssg.base_addr);
+ HDfprintf(stdout, "%d:%s: entry_ptr->base_addr = %a.\n",
+ world_mpi_rank, fcn_name, entry_ptr->base_addr);
+ }
+
+ if ( mssg.len != entry_ptr->len ) {
+
+ HDfprintf(stdout, "%d:%s: mssg.len != entry_ptr->len.\n",
+ world_mpi_rank, fcn_name);
+ HDfprintf(stdout, "%d:%s: mssg.len = %a.\n",
+ world_mpi_rank, fcn_name, mssg.len);
+ }
+
+ if ( mssg.ver < entry_ptr->ver ) {
+
+ HDfprintf(stdout, "%d:%s: mssg.ver < entry_ptr->ver.\n",
+ world_mpi_rank, fcn_name);
+ }
+
+ if ( mssg.magic != MSSG_MAGIC ) {
+
+ HDfprintf(stdout, "%d:%s: mssg.magic != MSSG_MAGIC.\n",
+ world_mpi_rank, fcn_name);
+ }
+#endif /* JRM */
} else {
entry_ptr->ver = mssg.ver;
@@ -2244,6 +2551,8 @@ lock_entry(H5C_t * cache_ptr,
entry_ptr = &(data[idx]);
+ HDassert( ! (entry_ptr->locked) );
+
cache_entry_ptr = H5AC_protect(file_ptr, -1, &(types[0]),
entry_ptr->base_addr,
NULL, NULL, H5AC_WRITE);
@@ -2258,7 +2567,12 @@ lock_entry(H5C_t * cache_ptr,
HDfprintf(stdout, "%d:%s: error in H5AC_protect().\n",
world_mpi_rank, fcn_name);
}
- }
+ } else {
+
+ entry_ptr->locked = TRUE;
+
+ }
+
HDassert( ((entry_ptr->header).type)->id == DATUM_ENTRY_TYPE );
}
@@ -2319,7 +2633,8 @@ mark_pinned_entry_dirty(H5C_t * cache_ptr,
nerrors++;
if ( verbose ) {
- HDfprintf(stdout, "%d:%s: error in H5AC_mark_pinned_entry_dirty().\n",
+ HDfprintf(stdout,
+ "%d:%s: error in H5AC_mark_pinned_entry_dirty().\n",
world_mpi_rank, fcn_name);
}
}
@@ -2335,6 +2650,69 @@ mark_pinned_entry_dirty(H5C_t * cache_ptr,
/*****************************************************************************
+ * Function: mark_pinned_or_protected_entry_dirty()
+ *
+ * Purpose: Use the H5AC_mark_pinned_or_protected_entry_dirty() call to
+ * mark dirty the entry indicated by the index,
+ *
+ * Do nothing if nerrors is non-zero on entry.
+ *
+ * Return: void
+ *
+ * Programmer: John Mainzer
+ * 5/18/06
+ *
+ * Modifications:
+ *
+ *****************************************************************************/
+
+void
+mark_pinned_or_protected_entry_dirty(H5C_t * cache_ptr,
+ H5F_t * file_ptr,
+ int32_t idx)
+{
+ const char * fcn_name = "mark_pinned_or_protected_entry_dirty()";
+ herr_t result;
+ struct datum * entry_ptr;
+
+ if ( nerrors == 0 ) {
+
+ HDassert( file_ptr );
+ HDassert( cache_ptr );
+ HDassert( ( 0 <= idx ) && ( idx < NUM_DATA_ENTRIES ) );
+ HDassert( idx < virt_num_data_entries );
+
+ entry_ptr = &(data[idx]);
+
+ HDassert ( entry_ptr->locked || entry_ptr->global_pinned );
+
+ (entry_ptr->ver)++;
+ entry_ptr->dirty = TRUE;
+
+ result = H5AC_mark_pinned_or_protected_entry_dirty(file_ptr,
+ (void *)entry_ptr);
+
+ if ( result < 0 ) {
+
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: error in %s.\n",
+ world_mpi_rank, fcn_name,
+ "H5AC_mark_pinned_or_protected_entry_dirty()");
+ }
+ }
+ else if ( ! ( entry_ptr->locked ) )
+ {
+ global_dirty_pins++;
+ }
+ }
+
+ return;
+
+} /* mark_pinned_or_protected_entry_dirty() */
+
+
+/*****************************************************************************
* Function: pin_entry()
*
* Purpose: Pin the entry indicated by the index.
@@ -2625,6 +3003,23 @@ setup_cache_for_test(hid_t * fid_ptr,
}
}
+#if DO_SYNC_AFTER_WRITE
+
+ if ( success ) {
+
+ if ( H5AC_set_write_done_callback(cache_ptr, do_sync) != SUCCEED ) {
+
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout,
+ "%d:%s: H5C_set_write_done_callback failed.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+ }
+
+#endif /* DO_SYNC_AFTER_WRITE */
+
return(success);
} /* setup_cache_for_test() */
@@ -2764,7 +3159,8 @@ setup_noblock_dxpl_id(void)
*
* Modifications:
*
- * None.
+ * JRM -- 5/9/06
+ * Modified function to facilitate setting predefined seeds.
*
*****************************************************************************/
@@ -2772,23 +3168,41 @@ void
setup_rand(void)
{
const char * fcn_name = "setup_rand()";
+ hbool_t use_predefined_seeds = FALSE;
+ int num_predefined_seeds = 3;
+ unsigned predefined_seeds[3] = {18669, 89925, 12577};
unsigned seed;
struct timeval tv;
struct timezone tz;
- if ( HDgettimeofday(&tv, &tz) != 0 ) {
+ if ( ( use_predefined_seeds ) &&
+ ( world_mpi_size == num_predefined_seeds ) ) {
+
+ HDassert( world_mpi_rank >= 0 );
+ HDassert( world_mpi_rank < world_mpi_size );
+
+ seed = predefined_seeds[world_mpi_rank];
+ HDfprintf(stdout, "%d:%s: predefined_seed = %d.\n",
+ world_mpi_rank, fcn_name, seed);
+ fflush(stdout);
+ HDsrand(seed);
- nerrors++;
- if ( verbose ) {
- HDfprintf(stdout, "%d:%s: gettimeofday() failed.\n",
- world_mpi_rank, fcn_name);
- }
} else {
- seed = (unsigned)tv.tv_usec;
- HDfprintf(stdout, "%d:%s: seed = %d.\n",
- world_mpi_rank, fcn_name, seed);
- fflush(stdout);
- HDsrand(seed);
+
+ if ( HDgettimeofday(&tv, &tz) != 0 ) {
+
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: gettimeofday() failed.\n",
+ world_mpi_rank, fcn_name);
+ }
+ } else {
+ seed = (unsigned)tv.tv_usec;
+ HDfprintf(stdout, "%d:%s: seed = %d.\n",
+ world_mpi_rank, fcn_name, seed);
+ fflush(stdout);
+ HDsrand(seed);
+ }
}
return;
@@ -2891,6 +3305,8 @@ unlock_entry(H5C_t * cache_ptr,
entry_ptr = &(data[idx]);
+ HDassert( entry_ptr->locked );
+
dirtied = ((flags & H5AC__DIRTIED_FLAG) == H5AC__DIRTIED_FLAG );
if ( dirtied ) {
@@ -2913,7 +3329,11 @@ unlock_entry(H5C_t * cache_ptr,
HDfprintf(stdout, "%d:%s: error in H5C_unprotect().\n",
world_mpi_rank, fcn_name);
}
- }
+ } else {
+
+ entry_ptr->locked = FALSE;
+
+ }
HDassert( ((entry_ptr->header).type)->id == DATUM_ENTRY_TYPE );
@@ -3040,7 +3460,16 @@ unpin_entry(H5C_t * cache_ptr,
*
* Modifications:
*
- * None.
+ * JRM -- 5/9/06
+ * Added code supporting the write request ack message. This
+ * message was added to eliminate one possible cause of a
+ * bug spotted on cobalt. If this doesn't fix the problem,
+ * it will narrow things down a bit.
+ *
+ * JRM -- 5/10/06
+ * Added call to do_sync(). This is part of an attempt to
+ * optimize out the slowdown caused by the addition of the
+ * write request ack message.
*
*****************************************************************************/
@@ -3085,7 +3514,7 @@ server_smoke_check(void)
mssg.ver = ++(data[world_mpi_rank].ver);
mssg.magic = MSSG_MAGIC;
- if ( ! ( success = send_mssg(&mssg) ) ) {
+ if ( ! ( success = send_mssg(&mssg, FALSE) ) ) {
nerrors++;
if ( verbose ) {
@@ -3094,6 +3523,47 @@ server_smoke_check(void)
}
}
+#if DO_WRITE_REQ_ACK
+
+ /* try to receive the write ack from the server */
+ if ( success ) {
+
+ success = recv_mssg(&mssg, WRITE_REQ_ACK_CODE);
+
+ if ( ! success ) {
+
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: recv_mssg() failed.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+ }
+
+ /* verify that we received the expected ack message */
+ if ( success ) {
+
+ if ( ( mssg.req != WRITE_REQ_ACK_CODE ) ||
+ ( mssg.src != world_server_mpi_rank ) ||
+ ( mssg.dest != world_mpi_rank ) ||
+ ( mssg.base_addr != data[world_mpi_rank].base_addr ) ||
+ ( mssg.len != data[world_mpi_rank].len ) ||
+ ( mssg.ver != data[world_mpi_rank].ver ) ||
+ ( mssg.magic != MSSG_MAGIC ) ) {
+
+ success = FALSE;
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: Bad data in write req ack.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+ }
+
+#endif /* DO_WRITE_REQ_ACK */
+
+ do_sync();
+
/* compose the read message */
mssg.req = READ_REQ_CODE;
mssg.src = world_mpi_rank;
@@ -3106,7 +3576,7 @@ server_smoke_check(void)
if ( success ) {
- success = send_mssg(&mssg);
+ success = send_mssg(&mssg, FALSE);
if ( ! success ) {
@@ -3121,7 +3591,7 @@ server_smoke_check(void)
/* try to receive the reply from the server */
if ( success ) {
- success = recv_mssg(&mssg);
+ success = recv_mssg(&mssg, READ_REQ_REPLY_CODE);
if ( ! success ) {
@@ -3165,7 +3635,7 @@ server_smoke_check(void)
if ( success ) {
- success = send_mssg(&mssg);
+ success = send_mssg(&mssg, FALSE);
if ( ! success ) {
@@ -3326,7 +3796,7 @@ smoke_check_1(void)
if ( success ) {
- success = send_mssg(&mssg);
+ success = send_mssg(&mssg, FALSE);
if ( ! success ) {
@@ -3338,7 +3808,7 @@ smoke_check_1(void)
}
}
}
-
+
max_nerrors = get_max_nerrors();
if ( world_mpi_rank == 0 ) {
@@ -3543,7 +4013,7 @@ smoke_check_2(void)
if ( success ) {
- success = send_mssg(&mssg);
+ success = send_mssg(&mssg, FALSE);
if ( ! success ) {
@@ -3864,7 +4334,7 @@ smoke_check_3(void)
if ( success ) {
- success = send_mssg(&mssg);
+ success = send_mssg(&mssg, FALSE);
if ( ! success ) {
@@ -4163,7 +4633,7 @@ smoke_check_4(void)
if ( success ) {
- success = send_mssg(&mssg);
+ success = send_mssg(&mssg, FALSE);
if ( ! success ) {
@@ -4200,6 +4670,189 @@ smoke_check_4(void)
/*****************************************************************************
*
+ * Function: smoke_check_5()
+ *
+ * Purpose: Similar to smoke check 1, but modified to verify that
+ * H5AC_mark_pinned_or_protected_entry_dirty() works in
+ * the parallel case.
+ *
+ * Return: Success: TRUE
+ *
+ * Failure: FALSE
+ *
+ * Programmer: JRM -- 5/18/06
+ *
+ * Modifications:
+ *
+ * None.
+ *
+ *****************************************************************************/
+
+hbool_t
+smoke_check_5(void)
+{
+ const char * fcn_name = "smoke_check_5()";
+ hbool_t success = TRUE;
+ int i;
+ int max_nerrors;
+ hid_t fid = -1;
+ H5F_t * file_ptr = NULL;
+ H5C_t * cache_ptr = NULL;
+ struct mssg_t mssg;
+
+ if ( world_mpi_rank == 0 ) {
+
+ TESTING("smoke check #5");
+ }
+
+ nerrors = 0;
+ init_data();
+ reset_stats();
+
+ if ( world_mpi_rank == world_server_mpi_rank ) {
+
+ if ( ! server_main() ) {
+
+ /* some error occured in the server -- report failure */
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: server_main() failed.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+ }
+ else /* run the clients */
+ {
+ if ( ! setup_cache_for_test(&fid, &file_ptr, &cache_ptr) ) {
+
+ nerrors++;
+ fid = -1;
+ cache_ptr = NULL;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: setup_cache_for_test() failed.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+
+ for ( i = 0; i < (virt_num_data_entries / 2); i++ )
+ {
+ insert_entry(cache_ptr, file_ptr, i, H5AC__NO_FLAGS_SET);
+ }
+
+ /* flush the file so we can lock known clean entries. */
+ if ( H5Fflush(fid, H5F_SCOPE_GLOBAL) < 0 ) {
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: H5Fflush() failed.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+
+ for ( i = 0; i < (virt_num_data_entries / 4); i++ )
+ {
+ lock_entry(cache_ptr, file_ptr, i);
+
+ if ( i % 2 == 0 )
+ {
+ mark_pinned_or_protected_entry_dirty(cache_ptr, file_ptr, i);
+ }
+
+ unlock_entry(cache_ptr, file_ptr, i, H5AC__NO_FLAGS_SET);
+ }
+
+ for ( i = (virt_num_data_entries / 2) - 1;
+ i >= (virt_num_data_entries / 4);
+ i-- )
+ {
+ pin_entry(cache_ptr, file_ptr, i, TRUE, FALSE);
+
+ if ( i % 2 == 0 )
+ {
+ if ( i % 4 == 0 )
+ {
+ mark_pinned_or_protected_entry_dirty(cache_ptr,
+ file_ptr, i);
+ }
+ else
+ {
+ mark_pinned_entry_dirty(cache_ptr, file_ptr, i,
+ FALSE, (size_t)0);
+ }
+ }
+ unpin_entry(cache_ptr, file_ptr, i, TRUE, FALSE, FALSE);
+ }
+
+ if ( fid >= 0 ) {
+
+ if ( ! take_down_cache(fid) ) {
+
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: take_down_cache() failed.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+ }
+
+ /* verify that all instance of datum are back where the started
+ * and are clean.
+ */
+
+ for ( i = 0; i < NUM_DATA_ENTRIES; i++ )
+ {
+ HDassert( data_index[i] == i );
+ HDassert( ! (data[i].dirty) );
+ }
+
+ /* compose the done message */
+ mssg.req = DONE_REQ_CODE;
+ mssg.src = world_mpi_rank;
+ mssg.dest = world_server_mpi_rank;
+ mssg.mssg_num = -1; /* set by send function */
+ mssg.base_addr = 0; /* not used */
+ mssg.len = 0; /* not used */
+ mssg.ver = 0; /* not used */
+ mssg.magic = MSSG_MAGIC;
+
+ if ( success ) {
+
+ success = send_mssg(&mssg, FALSE);
+
+ if ( ! success ) {
+
+ nerrors++;
+ if ( verbose ) {
+ HDfprintf(stdout, "%d:%s: send_mssg() failed on done.\n",
+ world_mpi_rank, fcn_name);
+ }
+ }
+ }
+ }
+
+ max_nerrors = get_max_nerrors();
+
+ if ( world_mpi_rank == 0 ) {
+
+ if ( max_nerrors == 0 ) {
+
+ PASSED();
+
+ } else {
+
+ failures++;
+ H5_FAILED();
+ }
+ }
+
+ success = ( ( success ) && ( max_nerrors == 0 ) );
+
+ return(success);
+
+} /* smoke_check_5() */
+
+
+/*****************************************************************************
+ *
* Function: main()
*
* Purpose: Main function for the parallel cache test.
@@ -4375,6 +5028,9 @@ main(int argc, char **argv)
#if 1
smoke_check_4();
#endif
+#if 1
+ smoke_check_5();
+#endif
finish:
/* make sure all processes are finished before final report, cleanup