tools/internal/lsp
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
..
browser internal/lsp: add version and bug commands 2019-05-11 04:16:02 +00:00
cache internal/lsp: fix deadlocks loading lots of files at once 2019-07-03 17:22:52 +00:00
cmd internal/lsp: support a file belonging to multiple packages 2019-06-26 17:56:19 +00:00
debug internal/lsp: update version 2019-06-28 16:54:56 +00:00
diff internal/lsp: enable incrementalSync by default 2019-06-26 20:40:24 +00:00
protocol internal/lsp: new requests.ts to generate new versions of tsclient.go and tsserver.go 2019-06-28 15:31:33 +00:00
snippet internal/lsp: introduce snippet builder object 2019-04-25 18:37:29 +00:00
source internal/lsp: add configuration for hover levels 2019-07-03 17:17:32 +00:00
telemetry internal/lsp: add telemetry stubs 2019-06-24 18:10:36 +00:00
testdata internal/lsp: improve completion support for untyped constants 2019-07-03 16:30:32 +00:00
tests internal/lsp: improve completion support for untyped constants 2019-07-03 16:30:32 +00:00
xlog internal/lsp: add the ability to log back to the client 2019-04-01 16:22:08 +00:00
code_action.go internal/lsp, internal/imports: use the internal goimports library 2019-07-01 19:45:22 +00:00
completion.go internal/lsp: match completions case-insensitively 2019-06-28 03:43:36 +00:00
definition.go internal/lsp: attach documentation to signature help 2019-06-06 17:46:28 +00:00
diagnostics.go internal/lsp: plumb suggested fixes through the LSP 2019-06-26 21:02:18 +00:00
format.go internal/lsp: handle err in formatRange 2019-06-27 22:00:10 +00:00
general.go internal/lsp: add configuration for hover levels 2019-07-03 17:17:32 +00:00
highlight.go internal/lsp: separate refactorings out of memoization CL 2019-06-25 16:04:30 +00:00
hover.go internal/lsp: add configuration for hover levels 2019-07-03 17:17:32 +00:00
link.go internal/lsp: separate refactorings out of memoization CL 2019-06-25 16:04:30 +00:00
lsp_test.go internal/lsp: add configuration for hover levels 2019-07-03 17:17:32 +00:00
references.go internal/lsp: find references in test packages 2019-07-01 19:17:42 +00:00
rename.go internal/lsp: separate refactorings out of memoization CL 2019-06-25 16:04:30 +00:00
reset_golden.sh internal/lsp: fix definition tests to use golden files 2019-05-10 21:06:55 +00:00
server.go internal/lsp: add configuration for hover levels 2019-07-03 17:17:32 +00:00
signature_help.go internal/lsp: reply with nil, rather than empty, signature help 2019-06-08 02:21:20 +00:00
symbols.go internal/lsp: separate refactorings out of memoization CL 2019-06-25 16:04:30 +00:00
text_synchronization.go internal/lsp: check file content on disk when opening 2019-07-01 19:36:37 +00:00
util.go internal/span: change URI.Filename so it just returns the filename 2019-06-10 21:39:43 +00:00
workspace.go internal/lsp: build the packages config on demand from proper configuration 2019-05-21 17:12:43 +00:00