GODRIVER-2109 Prevent a data race between connecting and checking out a connection from the resourcePool. #726
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.
GODRIVER-2109
There is currently a data race on the field
connection.desc
between setting it at connection.go#L231 and reading it at pool.go#L199 and pool.go#L535. The data race occurs when theresourcePool.Maintain()
function adds connections to satisfyminPoolSize
(only whenminPoolSize > 0
). The unconnected connections are added to theresourcePool
and then connected in a separate goroutine, which results in concurrent access to theconnection.desc
field when another goroutine attempts to get the connection from theresourcePool
.Changes:
resourcePool.Maintain()
andpool.connectionInitFunc()
to wait for a connection to finish connecting before making it available to check out from theresourcePool
.