wait for done before writing to shared resp body #532
Merged
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.
This PR fixes what seems to be a data race condition. Previously if the caller of this Do() canceled the context, or the provided context has timed out the select statement would enter that branch and then close the response body. This could potentially occur concurrently with launched go routine on line 115. My solution simply moves the receive on the done channel before the close of the resp body.
May want to consider whether we check context in the go routine launched on line 115 before reading the body as a good measure of "don't do work you don't need too". I'll wait for initial comments on this PR to make sure my logic is correct.
fixes #531