v0.1.8
tagged this
02 Dec 03:25
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 <[email protected]> Run-TryBot: Bryan C. Mills <[email protected]> gopls-CI: kokoro <[email protected]> Reviewed-by: Robert Findley <[email protected]> TryBot-Result: Go Bot <[email protected]>