Requesting update on blocker bug HDFFV-10300

I added the following debug printout to the code that flushes the metadata cache:

diff --git a/src/H5C.c b/src/H5C.c
index 288f3db7a1..71ec201d73 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -5841,6 +5841,7 @@ H5C__flush_ring(H5F_t *f, H5C_ring_t ring, unsigned flags)
                     protected_entries++;
                 } /* end if */
                 else {
+                    printf("flushing %s to addr %ld size %ld\n", entry_ptr->type->name, entry_ptr->addr, entry_ptr->size);
                     if(H5C__flush_single_entry(f, entry_ptr, (flags | H5C__DURING_FLUSH_FLAG)) < 0)
                         HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush entry")

The result when running my test program:

[estan@newton hdf5bug]$ ./add_dataset sizeoptimized.h5 
flushing Superblock to addr 0 size 96
flushing v1 B-tree to addr 136 size 544
flushing local heap prefix to addr 184 size 120
flushing Symbol table node to addr 304 size 328
flushing object header to addr 1280 size 272
flushing v1 B-tree to addr 1552 size 2096
flushing Superblock to addr 0 size 96
[estan@newton hdf5bug]$

As you can see, the writeout of the v1 B-tree of size 544 to address 136 (which I believe is the root group symbol table) will overwrite the (pre-existing) local heap of size 120 at address 184. I’ve verified that the flush actually results in a write (H5FD_sec2_write gets called).

As to why that B-tree cache entry has gotten an addr / size which overlaps a preexisting piece of data, I haven’t figured out yet. Perhaps someone familiar with the code can have a look?