go/internal
Bryan C. Mills e212aff8fd internal/memoize: do not allow (*Generation).Acquire to fail
The Acquire method is nearly instantaneous; it only potentially blocks
on a small, constant sequence of cache misses, so there is no need to
avoid blocking in it when a Context is cancelled.

An early return when the passed-in Context is canceled was added in CL
242838 to avoid incrementing the Generation's WaitGroup after its
destruction has begun; however, that early return also bypasses the
WaitGroup accounting that blocks Destroy while the generation is still
in use. Instead, we need the invariant that Acquire is not called in
the first place after Destroy, which we can ensure by nilling out
the View's snapshot when we begin destroying it.

I was not able to reproduce golang/go#48774 locally, but I believe
that this CL will fix it. (It may, however, expose other races or
deadlocks that may have been masked by the early return, which we can
then fix separately.)

Fixes golang/go#48774

Change-Id: Iac36fceb06485f849da5ba0250b44b55f937c44b
Reviewed-on: https://go-review.googlesource.com/c/tools/+/367675
Trust: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
2021-12-02 03:25:35 +00:00
..
analysisinternal internal/lsp/fuzzy: fix return value on no match 2020-08-28 15:37:48 +00:00
apidiff all: add copyright notices to files that are missing them 2021-01-06 17:23:47 +00:00
event internal/lsp/debug: add a facility to track known bugs 2021-05-10 23:21:19 +00:00
fakenet
fastwalk x/tools/internal/fastwalk: fixes "interrupted system call" error 2021-02-24 01:32:32 +00:00
gocommand internal/gocommand: run 'go list' on the unsafe package when fetching release tags 2021-05-29 00:21:43 +00:00
gopathwalk internal/imports: fix crash when adding stdlib imports 2020-08-13 17:47:04 +00:00
imports internal/imports: update stdlib index for 1.17 2021-08-24 14:51:57 +00:00
jsonrpc2 internal/jsonrpc2: make Serve wait for all connections to close 2021-11-08 20:32:21 +00:00
jsonrpc2_v2 internal/lsp/lsprpc: update binder tests to handle forwarding 2021-06-25 19:21:47 +00:00
lsp internal/memoize: do not allow (*Generation).Acquire to fail 2021-12-02 03:25:35 +00:00
memoize internal/memoize: do not allow (*Generation).Acquire to fail 2021-12-02 03:25:35 +00:00
mod internal/mod: add workfile parser 2021-06-24 04:20:08 +00:00
packagesinternal internal/lsp/cache: disable network for mod tidy diagnostics 2021-02-05 19:41:14 +00:00
proxydir
span internal/span: fix a comment about windows drive letters 2021-08-03 19:59:22 +00:00
stack
testenv internal/testenv: treat linux-riscv64-unmatched as a slow builder 2021-11-03 20:13:57 +00:00
tool internal/lsp/cmd: print flags when running gopls help 2021-07-08 16:04:41 +00:00
typeparams go/types/typeutil: add support for mapping generic types 2021-12-02 03:14:37 +00:00
typesinternal internal/typesinternal: document ReadGo116ErrorData 2021-09-21 03:32:29 +00:00
xcontext