__ovfl_reuse_wrapup: memory leak and cache footprint inflation when block_free fails

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Fixed
    • Priority: Major - P3
    • WT12.0.0, 9.0.0-rc0
    • Affects Version/s: None
    • Component/s: Overflow Items
    • None
    • Environment:
      GCC 13, Ubuntu 24.04
    • Storage Engines - Persistence, Storage Engines - Transactions
    • 0
    • SE Transactions - 2026-06-19
    • 1

      In rec_track.c the __ovfl_reuse_wrapup uses WT_RET when calling __wt_btree_block_free. If block_free returns an error, the function returns immediately and skips both __wt_free(reuse) and __wt_cache_page_inmem_decr. This results in a leaked overflow reuse node and permanently inflated page memory footprint on every failed block_free call.

      The sibling function __ovfl_reuse_wrapup_err already uses WT_TRET and correctly 
      continues cleanup on failure, but silently swallows the error by returning 0 
      instead of ret.

       

      Purposed Fix:
       __ovfl_reuse_wrapup: replace WT_RET with WT_TRET, add WT_DECL_RET, return ret instead of 0.
      __ovfl_reuse_wrapup_err: return ret instead of 0 so the error accumulated by WT_TRET is propagated to the caller.

      For reproduce:
      (I created a PR for this issue to reproduce)
      (You can just pull the PR and run the test without fix(in the rec_track.c) and see the result)

      1. Build WiredTiger with -DHAVE_UNITTEST=1
      2. Run: ./build/test/catch2/catch2-unittests "[reconciliation]"
      3. Observe: ovfl_reuse_wrapup test fails memory_footprint remains inflated after block_free error

            Assignee:
            Etienne Petrel
            Reporter:
            Tuna KARABACAK
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: