diff options
author | John Mainzer <mainzer@hdfgroup.org> | 2008-01-23 21:38:47 (GMT) |
---|---|---|
committer | John Mainzer <mainzer@hdfgroup.org> | 2008-01-23 21:38:47 (GMT) |
commit | 271e4e4663c25b121e900cf24cacbd8617f0a1dd (patch) | |
tree | 79c82e66d37349a317084a9d3121ebf66adb5198 | |
parent | c96f1e9f348f2aeffd2b3a4d31e81c9c4935d4fa (diff) | |
download | hdf5-271e4e4663c25b121e900cf24cacbd8617f0a1dd.zip hdf5-271e4e4663c25b121e900cf24cacbd8617f0a1dd.tar.gz hdf5-271e4e4663c25b121e900cf24cacbd8617f0a1dd.tar.bz2 |
[svn-r14450] Fixed metadata cache performance bug introduced while adding code to
detect and handle the case in which the skip list or LRU is modified
out from under a scan of same by the flush callback of the entry under
consideration.
Test serial debug, serial production, and parallel debug on phoenix,
and commit tested.
-rw-r--r-- | src/H5C.c | 23 |
1 files changed, 12 insertions, 11 deletions
@@ -9234,10 +9234,6 @@ H5C__flash_increase_cache_size(H5C_t * cache_ptr, double hit_rate; FUNC_ENTER_NOAPI_NOINIT(H5C__flash_increase_cache_size) -#if 0 - HDfprintf(stdout, "%s: old = %ld, new = %ld.\n", fcn_name, - (long)old_entry_size, (long)new_entry_size); -#endif HDassert( cache_ptr ); HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC ); HDassert( cache_ptr->flash_size_increase_possible ); @@ -10809,17 +10805,22 @@ H5C_make_space_in_cache(H5F_t * f, } else #endif /* NDEBUG */ - if ( ( prev_ptr->is_dirty != prev_is_dirty ) - || - ( prev_ptr->next != next_ptr ) - || - ( prev_ptr->is_protected ) - || - ( prev_ptr->is_pinned ) ) { + if ( (entry_ptr->type)->id == H5C__EPOCH_MARKER_TYPE ) { + + entry_ptr = prev_ptr; + + } else if ( ( prev_ptr->is_dirty != prev_is_dirty ) + || + ( prev_ptr->next != next_ptr ) + || + ( prev_ptr->is_protected ) + || + ( prev_ptr->is_pinned ) ) { /* something has happened to the LRU -- start over * from the tail. */ + entry_ptr = cache_ptr->LRU_tail_ptr; } else { |