-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Major - P3
-
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