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.
relates to #13480
fully fixes #13474
Seems like
Header.hash
memoization changes from a few months ago have madeBlock.Header()
(which makes a copy by callingCopyHeader
) show race warnings. This is because we are copying overatomic.Pointer
inCopyHeader
.This PR fixes this by manually copy-ing all fields and skipping copy of the
hash atomic.Pointer
attribute (instead it will get set using its zero value - correct behaviour) and then the hash will be memoized using it as part of the copy later on.This is a bit clumsier as we can miss updating the
CopyHeader
function when adding new attributes to theHeader
struct - to address that I've added a reflection based test which will generate random values for all struct fields and as a result capture this pitfall and remind developers to update.Example race detected: