diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2002-02-13 19:23:57 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2002-02-13 19:23:57 (GMT) |
commit | 6e209992eebb1ee91ccc8e1eff31fca67ded227e (patch) | |
tree | 337a47de005aad23ee06535dea948e40ce6cf6e9 | |
parent | 2c74598cbf97e35b1e7f803b4551c21601209b70 (diff) | |
download | hdf5-6e209992eebb1ee91ccc8e1eff31fca67ded227e.zip hdf5-6e209992eebb1ee91ccc8e1eff31fca67ded227e.tar.gz hdf5-6e209992eebb1ee91ccc8e1eff31fca67ded227e.tar.bz2 |
[svn-r4948] Purpose:
Bug fix
Description:
When a block was preempted from the chunk cache, it is possible that one
of the pointers in the algorithm is invalidated and would generate a core
dump.
Solution:
Re-calculate the internal pointer and move the the preemption after the
re-calc.
Platforms tested:
FreeBSD 4.5 (sleipnir)
-rw-r--r-- | src/H5Distore.c | 3 | ||||
-rw-r--r-- | src/H5Fistore.c | 3 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/H5Distore.c b/src/H5Distore.c index 886529d..ed5d351 100644 --- a/src/H5Distore.c +++ b/src/H5Distore.c @@ -1276,10 +1276,11 @@ H5F_istore_prune (H5F_t *f, size_t size) } if (cur) { - if (H5F_istore_preempt(f, cur)<0) nerrors++; for (j=0; j<nmeth; j++) { if (p[j]==cur) p[j] = NULL; + if (n[j]==cur) n[j] = cur->next; } + if (H5F_istore_preempt(f, cur)<0) nerrors++; } } diff --git a/src/H5Fistore.c b/src/H5Fistore.c index 886529d..ed5d351 100644 --- a/src/H5Fistore.c +++ b/src/H5Fistore.c @@ -1276,10 +1276,11 @@ H5F_istore_prune (H5F_t *f, size_t size) } if (cur) { - if (H5F_istore_preempt(f, cur)<0) nerrors++; for (j=0; j<nmeth; j++) { if (p[j]==cur) p[j] = NULL; + if (n[j]==cur) n[j] = cur->next; } + if (H5F_istore_preempt(f, cur)<0) nerrors++; } } |