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.
What was changed
I changed the
json.Register
function to only invokeregistrar.Register
after all handlers have been added to the map.Why?
It's possible for one of the handlers to be invoked after it has been registered with the registrar. Also, there's nothing stopping that from happening before we've finished writing to the
handlers
map, and thehandler
function reads from that same map, so this could lead to a data race.Checklist
Closes [Bug] Race: Concurrent map read/write, probably in server temporal#5123
How was this tested:
You can see a justification for this here: temporalio/temporal#5123 (comment).
It's hard to reproduce this in temporal itself because it's a very rare bug, so I'm not going to try. The change itself is small, so it should be easy to see if it goes away.
No.