mirror of https://github.com/golang/go.git
internal/lsp: do not block on channel when there is an error
In `internal/lsp/cmd.(*connection).diagnoseFiles`, when we request for `gopls/diagnoseFiles`, we are blocked on the channel even if there is an error. In such a scenario, we've reach a deadlock since. Avoid this by checking for error, existing if it exists and also closing the channel while we're at it. Fixes golang/go#46251 Signed-off-by: Karthik Nayak <karthik.188@gmail.com> Change-Id: I4266ab3ac272a9ae3eac2084b70b6568b72c1984 GitHub-Last-Rev: 94bf2926a0f35d51d62643618a8072ef5a8b5225 GitHub-Pull-Request: golang/tools#324 Reviewed-on: https://go-review.googlesource.com/c/tools/+/329109 Reviewed-by: Rebecca Stambler <rstambler@golang.org> Trust: Rebecca Stambler <rstambler@golang.org> Trust: Heschi Kreinick <heschi@google.com> Run-TryBot: Rebecca Stambler <rstambler@golang.org> gopls-CI: kokoro <noreply+kokoro@google.com> TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
parent
463a76b3dc
commit
d25f906682
|
|
@ -527,8 +527,13 @@ func (c *connection) diagnoseFiles(ctx context.Context, files []span.URI) error
|
|||
|
||||
c.Client.diagnosticsDone = make(chan struct{})
|
||||
_, err := c.Server.NonstandardRequest(ctx, "gopls/diagnoseFiles", map[string]interface{}{"files": untypedFiles})
|
||||
if err != nil {
|
||||
close(c.Client.diagnosticsDone)
|
||||
return err
|
||||
}
|
||||
|
||||
<-c.Client.diagnosticsDone
|
||||
return err
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *connection) terminate(ctx context.Context) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue