InmemSink: create a new RWMutex , because they are not safe to copy #124
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.
We noticed some Consul tests deadlock and timeout when run with the race detector (example). I tracked down the problem to this line in
InmemSink.Data
.In 1d3de9f there was a change made to fix some data races in this method. It looks like the
RWMutex
field was missed, possibly because the issue isn't a data race itself, so isn't reported by the race detector.RWMutex
are not safe for copying, so we need to create a new instance on the copy ofIntervalMetrics
.Before this change I was able to pretty reliable cause the test to deadlock in under 200 runs. After this change the test no longer deadlocks after 1000+ runs. I haven't looked at the
RWMutex
internals, but I assume the docs mention they can not be copied for this reason.