-
Notifications
You must be signed in to change notification settings - Fork 91
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
[Consensus] Add locking on the chain index vector. #950
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This alleviates a data race reported by tsan (concurrent access to size(), operator[], and resize()).
CaveSpectre11
added
Component: Consensus
Part of the core cryptocurrency consensus protocol
Component: Core App
Related to the application itself.
Tag: Waiting For Code Review
Waiting for code review from a core developer
labels
May 18, 2021
CaveSpectre11
approved these changes
May 19, 2021
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.
utACK 3cf8acf
When does cs_vchain get unlocked? |
When the lock object is destroyed, when it goes out of scope. |
WetOne
approved these changes
May 24, 2021
utACK 3cf8acf |
codeofalltrades
added
Code Review: Passed
Tag: Waiting For QA
A pull review is waiting for QA to test the pull request
and removed
Tag: Waiting For Code Review
Waiting for code review from a core developer
labels
May 24, 2021
codeofalltrades
approved these changes
May 26, 2021
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.
ACK 3cf8acf
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Code Review: Passed
Component: Consensus
Part of the core cryptocurrency consensus protocol
Component: Core App
Related to the application itself.
Tag: Waiting For QA
A pull review is waiting for QA to test the pull request
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
tsan identified a data race on CChain, particularly concurrent access to the underlying vector's
operator[]
,size
, andresize
member functions.Solution
Create a new lock
cs_vchain
and markvchain
as guarded by it, and ensure that the lock is taken prior to any use.For the
operator==
member function, grab both the locks in a prescribed order to avoid a deadlock.Tested
Configured with --with-sanitizers=tsan, built with clang, run on regtest with 2 SHA mining threads enabled.