Fix race condition in mempool fee estimation during block reorg #34585

pull vishalharkal15 wants to merge 3 commits into bitcoin:master from vishalharkal15:fix-mempool-race-condition-34584 changing 3 files +136 −0
  1. vishalharkal15 commented at 6:22 PM on February 13, 2026: none

    Fixes #34584

    This commit addresses a critical race condition between mempool trimming (LimitMempoolSize) and transaction validation that could lead to stale UTXO cache usage and consensus divergence.

    Changes:

    • Add cache flush after LimitMempoolSize() in MaybeUpdateMempoolForReorg()
    • Reset m_view backend after CleanupTemporaryCoins() in single tx acceptance
    • Add explicit CleanupTemporaryCoins() after package mempool trimming
    • Ensure proper backend reset in CleanupTemporaryCoins() itself

    The fix ensures that after any mempool state change, the cached coin view is properly synchronized to prevent validation using stale data. This prevents false 'mempool full' rejections and maintains mempool consistency across nodes during chain reorganizations.

    <!-- *** Please remove the following help text before submitting: *** Pull requests without a rationale and clear improvement may be closed immediately. GUI-related pull requests should be opened against https://github.com/bitcoin-core/gui first. See CONTRIBUTING.md -->

    <!-- Please provide clear motivation for your patch and explain how it improves Bitcoin Core user experience or Bitcoin Core developer experience significantly: * Any test improvements or new tests that improve coverage are always welcome. * All other changes should have accompanying unit tests (see `src/test/`) or functional tests (see `test/`). Contributors should note which tests cover modified code. If no tests exist for a region of modified code, new tests should accompany the change. * Bug fixes are most welcome when they come with steps to reproduce or an explanation of the potential issue as well as reasoning for the way the bug was fixed. * Features are welcome, but might be rejected due to design or scope issues. If a feature is based on a lot of dependencies, contributors should first consider building the system outside of Bitcoin Core, if possible. * Refactoring changes are only accepted if they are required for a feature or bug fix or otherwise improve developer experience significantly. For example, most "code style" refactoring changes require a thorough explanation why they are useful, what downsides they have and why they *significantly* improve developer experience or avoid serious programming bugs. Note that code style is often a subjective matter. Unless they are explicitly mentioned to be preferred in the [developer notes](/doc/developer-notes.md), stylistic code changes are usually rejected. -->

    <!-- Bitcoin Core has a thorough review process and even the most trivial change needs to pass a lot of eyes and requires non-zero or even substantial time effort to review. There is a huge lack of active reviewers on the project, so patches often sit for a long time. -->

  2. DrahtBot commented at 6:22 PM on February 13, 2026: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    Concept NACK ismaelsadeeq, l0rinc, yuvicc

    If your review is incorrectly listed, please copy-paste <code>&lt;!--meta-tag:bot-skip--&gt;</code> into the comment that the bot should ignore.

    <!--174a7506f384e20aa4161008e828411d-->

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #29700 (kernel, refactor: return error status on all fatal errors by ryanofsky)

    If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

  3. l0rinc changes_requested
  4. l0rinc commented at 6:30 PM on February 13, 2026: contributor

    You're modifying validation code without any reproducers. Add a test to prove the problem so that if we revert the fix it fails for the right reasons, recreating the mentioned rejection. It also helps the reviewers debug the problem locally before and after the fix.

  5. Fix race condition in mempool fee estimation during block reorg
    Fixes #34584
    
    This commit addresses a critical race condition between mempool
    trimming (LimitMempoolSize) and transaction validation that could
    lead to stale UTXO cache usage and consensus divergence.
    
    Changes:
    - Add cache flush after LimitMempoolSize() in MaybeUpdateMempoolForReorg()
    - Reset m_view backend after CleanupTemporaryCoins() in single tx acceptance
    - Add explicit CleanupTemporaryCoins() after package mempool trimming
    - Ensure proper backend reset in CleanupTemporaryCoins() itself
    
    The fix ensures that after any mempool state change, the cached coin
    view is properly synchronized to prevent validation using stale data.
    This prevents false 'mempool full' rejections and maintains mempool
    consistency across nodes during chain reorganizations.
    dca622c12d
  6. vishalharkal15 force-pushed on Feb 13, 2026
  7. Add test case to reproduce mempool race condition during reorg
    This test specifically reproduces issue #34584 where a race condition
    occurs during block reorganization when:
    1. Transactions are re-added to mempool after a reorg
    2. Mempool size limiting evicts some transactions
    3. The cached UTXO view retains stale references
    
    The test verifies that subsequent transaction validation works correctly
    and doesn't access stale cache data. Without the fix in validation.cpp,
    this test would fail or cause assertions.
    
    This helps reviewers verify the bug exists and understand the fix.
    dbff2b5e77
  8. ismaelsadeeq commented at 11:15 PM on February 13, 2026: member

    NACK

    1. We do not even have a mempool fee estimation; this title of the PR is not correct and misleading.
    2. This issue is unclear, and after first pass, I don't think we have such an issue.
    3. The reproducer does not work; the test passes on master.

    Thank you for wanting to contribute to this project, but this is not the right approach to this. If you post an issue, you might want to have a reliable reproducer before opening a PR.

    If you genuinely want to contribute, meaningfully check out https://github.com/bitcoin/bitcoin/blob/master/CONTRIBUTING.md.

  9. DrahtBot added the label CI failed on Feb 14, 2026
  10. DrahtBot commented at 1:56 PM on February 14, 2026: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Task lint: https://github.com/bitcoin/bitcoin/actions/runs/22000245145/job/63621831123</sub> <sub>LLM reason (✨ experimental): Trailing whitespace detected by lint check, causing CI failure.</sub>

    <details><summary>Hints</summary>

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  11. test: Fix linting errors in mempool_reorg_race_condition.py
    - Remove trailing whitespace from blank lines
    - Remove unused block_hash variable
    c7b5d66b0d
  12. vishalharkal15 requested review from l0rinc on Feb 14, 2026
  13. l0rinc commented at 7:19 PM on February 14, 2026: contributor

    pretty cool what LLMs can do NACK, the author obviously doesn't understand the change

  14. yuvicc commented at 5:15 AM on February 16, 2026: contributor

    Definitely a NACK, the CI fails as well.

    AI Slop has increased a lot.

  15. fanquake closed this on Feb 16, 2026


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-04-28 00:12 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me