fix data conflict when prepending preloads from document meta #379
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 data race due to the concurrent access of shared slice by multiple goroutines.
rel/repository.go
Line 1204 in 6c3495d
The above code prepends
meta.preload
toquery.PreloadQuery
. However:meta.preload
's capacity) has enough space, the new slice still references the same underlying array.query.PreloadQuery
concurrently, they might end up using the same underlying array, leading to:query.PreloadQuery
, as one goroutine's operation interferes with another's.To fix this, clone
meta.preload
and use it for prepending.Reproduction example