Fix data race in use of cmd output buffers. #58
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.
The bytes.Buffers used to store the output of subprocesses are managed with a
sync.Pool. However, before this change, they were being returned to the Pool
while the slice underlying the Buffer was still in use by caller methods. If
that Buffer was then used by another caller, reads and writes to the underlying
slice had the potential race with one another (which is detectable by running
with the "-race" flag enabled in a binary and/or a test).
This change puts the responsibility on the caller of cmdOutput to put the buffer
back in the pool once it is done reading data from it, ensuring no two methods
use its slice at the same time.
Signed-off-by: Erik Sipsma sipsma@amazon.com
Fixes #57