tools/internal
Muir Manders a00916dd39 internal/lsp: fix deadlocks loading lots of files at once
The first deadlock involved differing mutex acquisition order in two
code paths:

1. loadParseTypecheck() holds the "mcache" mutex then eventually
   acquires the "handleMu" file mutex.
2. (*goFile).invalidateContent() acquires the "handleMu" mutex first and
   then the "mcache" mutex.

Fix by changing the acquisition order in invalidateContent().

The second deadlock involved the file watcher. The two code paths
involved were:

1. (*goFile).GetPackages() holds the view mutex and eventually calls
   (*WatchMap).Watch, which acquires the watcher mutex.
2. (*session).openOverlay acquires the watcher mutex as it triggers a
   file's callbacks, and then the callback
   "(*goFile).invalidateContent" acquires the view mutex.

Fix by not holding the watcher mutex as we invoke the callbacks.

Fixes golang/go#32910

Change-Id: I9d060e0d80fd86a317a1d6c7aaa736a8ce10bd07
GitHub-Last-Rev: 04944fa0249c0e6f1022a415787e23abce21bc2e
GitHub-Pull-Request: golang/tools#129
Reviewed-on: https://go-review.googlesource.com/c/tools/+/184880
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2019-07-03 17:22:52 +00:00
..
apidiff apidiff: represent a Report as a list of Changes 2019-04-22 23:39:26 +00:00
fastwalk internal/fastwalk: avoid slice bounds out of range for long file names 2018-11-12 23:16:31 +00:00
gopathwalk imports: stop using go/packages for modules 2019-01-22 20:29:12 +00:00
imports internal/imports: refactor to split finding and applying fixes 2019-07-02 14:45:09 +00:00
jsonrpc2 internal/jsonrpc2: add some extra comments 2019-06-28 02:17:28 +00:00
lsp internal/lsp: fix deadlocks loading lots of files at once 2019-07-03 17:22:52 +00:00
memoize internal/memoize: document the complicated parts of the memoize package 2019-06-12 16:51:35 +00:00
module imports: stop using go/packages for modules 2019-01-22 20:29:12 +00:00
semver go/packages: add name= query 2018-10-16 20:20:09 +00:00
span internal/span: catch potential panics in go/token 2019-06-27 17:21:57 +00:00
tool internal/tool: add a small package to unify the flag handling across all our tools 2018-12-17 23:08:00 +00:00
txtar imports: stop using go/packages for modules 2019-01-22 20:29:12 +00:00