Unwatch and close connection on a batch write error #2240
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.
On a write error, a conn.Write simply unlock pgconn, leaving the connection as Idle and reusable while the multiResultReader would be closed. From this state, calling multiResultReader.Close won't try to receiveMessage and thus won't unwatch and close the connection since it is already closed. This leaves the connection "open" and the next time it's used, a "Watch already in progress" panic could be triggered.
This patch fixes the issue by unwatching and closing the connection on a batch write error, similar to what's done on a receiveMessage error. The same was done on Sync.Encode error even if the path is unreachable as Sync.Error never returns an error.