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.
There's a race condition in
Schema::WrapType
where it caches theWrapperType
in a map, keyed off of the original type. If you perform query validation on multiple threads, they may simultaneously lookup and emplace new values in the cache, invalidating the iterators on one of them, possibly resulting in duplicate entries.I'm using a
std::shared_mutex
as a reader/writer lock on each of these maps. It can find a match with astd::shared_lock
, and if there is no match, it'll trade that for astd::unique_lock
and perform theemplace
, which is equivalent to afind
if the key was added on another thread before acquiring thestd::unique_lock
.