fix: data race in AnalyzeTypeAddr for v0.10.4 #531
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.
fix #529
Issue Description
runtime.AnalyzeTypeAddr()
writes to a global variablealreadyAnalyzed
runtime.AnalyzeTypeAddr()
could be called once each from bothinitDecoder
andinitEncoder
initDecoder
andinitEncoder
were called simultaneously from different goroutines, it was detected as a data race, causing flaky test failuresSolution
Modified
runtime.AnalyzeTypeAddr
to usesync.Once
instead of a global variable to ensure thread-safe initializationVerification
Ran tests in my project using the following command:
go test -v -race ./... -count=1
Tests that were flaky in v0.10.4 now pass consistently with the fixed code
(verified with over 50 consecutive successful runs)