commit | e212aff8fd146c44ddb0167c1dfbd5531d6c9213 | [log] [tgz] |
---|---|---|
author | Bryan C. Mills <bcmills@google.com> | Mon Nov 29 14:34:38 2021 -0500 |
committer | Bryan C. Mills <bcmills@google.com> | Thu Dec 02 03:25:35 2021 +0000 |
tree | 3144fcd0621a655d4dfd4673d366b4bfc271ff72 | |
parent | 2ac48c609cc42974d25d7d22bda48525a7b24d88 [diff] |
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>
This subrepository holds the source for various packages and tools that support the Go programming language.
Some of the tools, godoc
and vet
for example, are included in binary Go distributions.
Others, including the Go guru
and the test coverage tool, can be fetched with go install
.
Packages include a type-checker for Go and an implementation of the Static Single Assignment form (SSA) representation for Go programs.
The easiest way to install is to run go install golang.org/x/tools/...@latest
.
This repository uses prettier to format JS and CSS files.
The version of prettier
used is 1.18.2.
It is encouraged that all JS and CSS code be run through this before submitting a change. However, it is not a strict requirement enforced by CI.
This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://golang.org/doc/contribute.html.
The main issue tracker for the tools repository is located at https://github.com/golang/go/issues. Prefix your issue with “x/tools/(your subdir):” in the subject line, so it is easy to find.