agent: add 1 buffer to errc to prevent goroutine leak #11302
Closed
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.
Description
In function
(*Server).runEtcd()
, ifselect
at line 150 choosescase <-time.After(time.Minute):
, then the goroutine created at line 125 will be blocked forever, because there is no receive to synchronize witherrc <- srv.startProxy()
at line 129etcd/functional/agent/handler.go
Lines 123 to 158 in 84e2788
How it is fixed
This patch is similar to line 210 in file lease/leasehttp/http.go of #7015
We add 1 buffer to the channel
errc
, and then the senderrc <- srv.startProxy()
will not be blocked and no goroutine will be leaked, but all receives will still be waiting for sent. So this patch is very safe.