-
Notifications
You must be signed in to change notification settings - Fork 38.8k
ThreadSanitizer: Fix #29767 #29776
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ThreadSanitizer: Fix #29767 #29776
Conversation
|
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. Code CoverageFor detailed information about the code coverage, see the test coverage report. ReviewsSee the guideline for information on the review process.
If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Setup m_synced = true; before Commit();
So this may cause a race condition window to BaseIndex::BlockConnected
If that's the case, sleeping the thread after setting m_synced and before Commit() should trigger the failure. Have you tried it?
mzumsande
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Concept ACK
Seems like this is not just a theoretical ThreadSanitizer error but a bug that could lead to index corruption in the case of unfortunate timing between the threads running Sync() and BlockConnected().
Yes, I have tried to recreate this bug with the original |
ryanofsky
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
|
Code review ACK bbe82c1 This looks like the correct fix to me. CI failure is unrelated. |
|
Merged this since it is a small straightfoward fix, only affects indexing, has 2 acks (ryanofsky, fjahr) and positive comments from other reviewers (mzumsande, sjors, furszy) |
Until #28955, Not going to look at it right now, but I suspect this fix just creates a different race instead. |
|
Looks like furszy already got this in #29867 |
I think the race condition fixed in #29867 was not introduced by my change; it was created by #28955, although my change makes the race condition window bigger. |
The race existed before #28955 because even before #28955, only the |
Github-Pull: bitcoin#29776 Rebased-From: bbe82c1
|
Backported for 27.x in #29888. |
bd5860b [WIP] doc: release notes for 27.x (fanquake) 475aac4 doc: add LLVM instruction for macOS < 13 (Sjors Provoost) a995902 depends: Fix build of Qt for 32-bit platforms (laanwj) 0fcceef Fix #29767, set m_synced = true after Commit() (nanlour) ae9a2ed sign: don't assume we are parsing a sane Miniscript (Antoine Poinsot) a6a59cf rpc: Reword SighashFromStr error message (MarcoFalke) 364bf01 build: Fix false positive `CHECK_ATOMIC` test for clang-15 (Hennadii Stepanov) 9277793 test: Fix failing univalue float test (MarcoFalke) 5c09791 doc: archive 27.0 release notes (fanquake) 897e5af [rpc, bugfix] Enforce maximum value for setmocktime (dergoegge) 602cfd5 ci: Bump s390x to ubuntu:24.04 (MarcoFalke) 20e6e8d Change Luke Dashjr seed to dashjr-list-of-p2p-nodes.us (Luke Dashjr) a6862c5 depends: fix mingw-w64 Qt DEBUG=1 build (fanquake) Pull request description: Backports: * #29691 * #29747 * #29776 * #29853 * #29856 * #29859 * #29869 * #29870 * #29886 * #29892 * #29934 * #29985 ACKs for top commit: willcl-ark: reACK bd5860b stickies-v: re-ACK bd5860b TheCharlatan: ACK bd5860b Tree-SHA512: a1a40de70cf52b5fc01d9dcc772421751a18c6a48a726c4c05c0371c585a53a27902e17daed9e0d721ab7763c94bb32de05c146bd6bc73fd558edd08b31e8547
Github-Pull: bitcoin#29776 Rebased-From: bbe82c1
aa7e876 [doc] add draft release notes for 26.2rc1 (glozow) 21d9aaa p2p, bugfix: detect addnode cjdns peers in GetAddedNodeInfo() (Jon Atack) ec5ce2f windeploy: Renew certificate (Ava Chow) 96d0e81 rpc: Reword SighashFromStr error message (MarcoFalke) 6685aff rpc: move UniValue in blockToJSON (willcl-ark) 7f45e00 depends: Fix build of Qt for 32-bit platforms (laanwj) f9b76ba ci: Pull in qtbase5-dev instead of seperate low-level libraries (laanwj) c587753 doc: Suggest installing dev packages for debian/ubuntu qt5 build (laanwj) 7ecdb08 ci: Bump s390x to ubuntu:24.04 (MarcoFalke) d9ef6cf sign: don't assume we are parsing a sane Miniscript (Antoine Poinsot) e4859c8 depends: fix mingw-w64 Qt DEBUG=1 build (fanquake) bb46b90 Fix #29767, set m_synced = true after Commit() (nanlour) bf5b6fc Throw error if invalid parameters passed to getnetworkhashps RPC endpoint (Jameson Lopp) a81a922 [rpc, bugfix] Enforce maximum value for setmocktime (dergoegge) d39ea51 Change Luke Dashjr seed to dashjr-list-of-p2p-nodes.us (Luke Dashjr) c21bbcc [doc] archive 26.1 release notes (glozow) Pull request description: Archives 26.1 release notes and adds draft release notes for 26.2rc1 Also backports: - #29691 - #29869 - #28554 - #29747 - #29853 - #29856 - #29764 - #29776 - #29985 - #30094 - #29870 - #30149 - #30085 ACKs for top commit: stickies-v: re-ACK aa7e876, only changes are fixing commit msg and transifex reference willcl-ark: ACK aa7e876 Tree-SHA512: b81ba6092640de696d782114cdf43e7ed1d63ea0a3231cade30653c2743d87700e0f852a1b1fcc42ae313b2d4f004e6026ddbad87d58c2fde0a660e90026ed98
bbe82c1 Fix #29767, set m_synced = true after Commit() (nanlour) Pull request description: I think this problem bitcoin/bitcoin#29767 (comment) is because of in BaseIndex::Sync https://github.com/bitcoin/bitcoin/blob/61de64df6790077857faba84796bb874b59c5d15/src/index/base.cpp#L163-L168 Setup m_synced = true; before Commit(); So this may cause a race condition window to BaseIndex::BlockConnected https://github.com/bitcoin/bitcoin/blob/61de64df6790077857faba84796bb874b59c5d15/src/index/base.cpp#L271-L274 So i try to fix it with move m_synced = true after Commit(). Also see comment of Sync(): https://github.com/bitcoin/bitcoin/blob/61de64df6790077857faba84796bb874b59c5d15/src/index/base.h#L151-L156 I am a newcomer interested in Bitcoin, trying to become a member of the Bitcoin Core development team. Please give me some feedback if you could, as I may be doing something wrong. Thank you! ACKs for top commit: fjahr: Code review ACK bbe82c1 ryanofsky: Code review ACK bbe82c1 Tree-SHA512: 89a09498a232c87ef1e083d4cc4ed9bb15f045ad0624d5d150a87187b2b8a48a41137974dbc7ea5c37f73da90742c43259f5aa7f84b4179eb8d62033e44fa479
bbe82c1 Fix #29767, set m_synced = true after Commit() (nanlour) Pull request description: I think this problem bitcoin/bitcoin#29767 (comment) is because of in BaseIndex::Sync https://github.com/bitcoin/bitcoin/blob/61de64df6790077857faba84796bb874b59c5d15/src/index/base.cpp#L163-L168 Setup m_synced = true; before Commit(); So this may cause a race condition window to BaseIndex::BlockConnected https://github.com/bitcoin/bitcoin/blob/61de64df6790077857faba84796bb874b59c5d15/src/index/base.cpp#L271-L274 So i try to fix it with move m_synced = true after Commit(). Also see comment of Sync(): https://github.com/bitcoin/bitcoin/blob/61de64df6790077857faba84796bb874b59c5d15/src/index/base.h#L151-L156 I am a newcomer interested in Bitcoin, trying to become a member of the Bitcoin Core development team. Please give me some feedback if you could, as I may be doing something wrong. Thank you! ACKs for top commit: fjahr: Code review ACK bbe82c1 ryanofsky: Code review ACK bbe82c1 Tree-SHA512: 89a09498a232c87ef1e083d4cc4ed9bb15f045ad0624d5d150a87187b2b8a48a41137974dbc7ea5c37f73da90742c43259f5aa7f84b4179eb8d62033e44fa479
I think this problem #29767 (comment) is because of
in BaseIndex::Sync
bitcoin/src/index/base.cpp
Lines 163 to 168 in 61de64d
Setup m_synced = true; before Commit();
So this may cause a race condition window to BaseIndex::BlockConnected
bitcoin/src/index/base.cpp
Lines 271 to 274 in 61de64d
So i try to fix it with move m_synced = true after Commit().
Also see comment of Sync():
bitcoin/src/index/base.h
Lines 151 to 156 in 61de64d
I am a newcomer interested in Bitcoin, trying to become a member of the Bitcoin Core development team. Please give me some feedback if you could, as I may be doing something wrong. Thank you!