Description
What version of Go are you using (go version
)?
$ go version go version devel +4b3f04c63b Thu Jan 10 18:15:48 2019 +0000 linux/amd64
Does this issue reproduce with the latest release?
Yes, I am testing on 7f7074d (master at time of writing) with the recent patch for URI escaping applied.
git fetch https://go.googlesource.com/tools refs/changes/77/161077/2 && git cherry-pick FETCH_HEAD
What did you do?
Compile gopls
with -race
. Use cmd/gopls/forward
. Use vscode-go. I am working out of my $GOPATH
using modules, and have GO111MODULE=on
.
I then did some development using vscode and observed the crash. Afraid I don't have a precise sequence to reproduce, but I wasn't doing anything fancy beyond just using the editor to edit code and perhaps jump to definition.
What did you expect to see?
Things working as normal.
What did you see instead?
The race detector reports warnings and then some time later I also encounter a panic with a nil pointer dereference. I'm including the nil dereference since these may be related?
Nil pointer dereference panic:
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x8e7976]
goroutine 20 [running]:
golang.org/x/tools/internal/lsp/cmd.(*Server).Run.func1(0xc004582700, 0xc004582440, 0xffffffffffffffff, 0xc0045568e8, 0x8, 0x0, 0x0)
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/cmd/server.go:104 +0x306
golang.org/x/tools/internal/jsonrpc2.(*Conn).run(0xc0001a7e30, 0xa77d00, 0xc0000bc010, 0x0, 0x0)
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:332 +0x895
golang.org/x/tools/internal/jsonrpc2.NewConn.func4(0xc0001a7e30, 0xa77d00, 0xc0000bc010)
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:110 +0x51
created by golang.org/x/tools/internal/jsonrpc2.NewConn
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:109 +0x261
Data race warnings:
==================
WARNING: DATA RACE
Read at 0x00c00010e640 by goroutine 9:
golang.org/x/tools/internal/lsp.(*server).cacheAndDiagnose.func1()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/diagnostics.go:29 +0x11b
Previous write at 0x00c00010e640 by goroutine 7:
golang.org/x/tools/internal/lsp.RunServerOnPort.func1()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/server.go:51 +0xfc
Goroutine 9 (running) created at:
golang.org/x/tools/internal/lsp.(*server).cacheAndDiagnose()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/diagnostics.go:23 +0x14e
golang.org/x/tools/internal/lsp.(*server).DidOpen()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/server.go:176 +0xae
golang.org/x/tools/internal/lsp/protocol.serverHandler.func1()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/protocol/server.go:147 +0x1e37
golang.org/x/tools/internal/jsonrpc2.(*Conn).run()
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:321 +0xa39
golang.org/x/tools/internal/jsonrpc2.NewConn.func4()
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:110 +0x50
Goroutine 7 (running) created at:
golang.org/x/tools/internal/lsp.RunServerOnPort()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/server.go:48 +0x2a7
golang.org/x/tools/internal/lsp/cmd.(*Server).Run()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/cmd/server.go:113 +0x1f5
golang.org/x/tools/internal/tool.Main.func2()
/home/pwaller/.local/src/golang.org/x/tools/internal/tool/tool.go:130 +0xb6
golang.org/x/tools/internal/tool.Main()
/home/pwaller/.local/src/golang.org/x/tools/internal/tool/tool.go:131 +0x29f
golang.org/x/tools/internal/lsp/cmd.(*Application).Run()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/cmd/cmd.go:67 +0x546
golang.org/x/tools/internal/tool.Main.func2()
/home/pwaller/.local/src/golang.org/x/tools/internal/tool/tool.go:130 +0xb6
golang.org/x/tools/internal/tool.Main()
/home/pwaller/.local/src/golang.org/x/tools/internal/tool/tool.go:131 +0x29f
main.main()
/home/pwaller/.local/src/golang.org/x/tools/cmd/gopls/main.go:20 +0x128
==================
==================
WARNING: DATA RACE
Read at 0x00c000102098 by goroutine 9:
golang.org/x/tools/internal/lsp/protocol.(*clientDispatcher).PublishDiagnostics()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/protocol/client.go:188 +0x3e
golang.org/x/tools/internal/lsp.(*server).cacheAndDiagnose.func1()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/diagnostics.go:29 +0x15b
Previous write at 0x00c000102098 by goroutine 7:
golang.org/x/tools/internal/lsp/protocol.RunServer()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/protocol/protocol.go:27 +0x1a6
golang.org/x/tools/internal/lsp.RunServerOnPort.func1()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/server.go:49 +0xb7
Goroutine 9 (running) created at:
golang.org/x/tools/internal/lsp.(*server).cacheAndDiagnose()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/diagnostics.go:23 +0x14e
golang.org/x/tools/internal/lsp.(*server).DidOpen()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/server.go:176 +0xae
golang.org/x/tools/internal/lsp/protocol.serverHandler.func1()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/protocol/server.go:147 +0x1e37
golang.org/x/tools/internal/jsonrpc2.(*Conn).run()
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:321 +0xa39
golang.org/x/tools/internal/jsonrpc2.NewConn.func4()
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:110 +0x50
Goroutine 7 (running) created at:
golang.org/x/tools/internal/lsp.RunServerOnPort()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/server.go:48 +0x2a7
golang.org/x/tools/internal/lsp/cmd.(*Server).Run()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/cmd/server.go:113 +0x1f5
golang.org/x/tools/internal/tool.Main.func2()
/home/pwaller/.local/src/golang.org/x/tools/internal/tool/tool.go:130 +0xb6
golang.org/x/tools/internal/tool.Main()
/home/pwaller/.local/src/golang.org/x/tools/internal/tool/tool.go:131 +0x29f
golang.org/x/tools/internal/lsp/cmd.(*Application).Run()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/cmd/cmd.go:67 +0x546
golang.org/x/tools/internal/tool.Main.func2()
/home/pwaller/.local/src/golang.org/x/tools/internal/tool/tool.go:130 +0xb6
golang.org/x/tools/internal/tool.Main()
/home/pwaller/.local/src/golang.org/x/tools/internal/tool/tool.go:131 +0x29f
main.main()
/home/pwaller/.local/src/golang.org/x/tools/cmd/gopls/main.go:20 +0x128
==================
==================
WARNING: DATA RACE
Write at 0x00c00010e668 by goroutine 8:
golang.org/x/tools/internal/lsp.(*server).setContent()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/diagnostics.go:44 +0x128
golang.org/x/tools/internal/lsp.(*server).cacheAndDiagnose()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/diagnostics.go:20 +0xea
golang.org/x/tools/internal/lsp.(*server).DidOpen()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/server.go:176 +0xae
golang.org/x/tools/internal/lsp/protocol.serverHandler.func1()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/protocol/server.go:147 +0x1e37
golang.org/x/tools/internal/jsonrpc2.(*Conn).run()
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:321 +0xa39
golang.org/x/tools/internal/jsonrpc2.NewConn.func4()
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:110 +0x50
Previous read at 0x00c00010e668 by goroutine 9:
golang.org/x/tools/internal/lsp.(*server).cacheAndDiagnose.func1()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/diagnostics.go:31 +0x218
Goroutine 8 (running) created at:
golang.org/x/tools/internal/jsonrpc2.NewConn()
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:109 +0x260
golang.org/x/tools/internal/lsp/protocol.RunServer()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/protocol/protocol.go:26 +0x179
golang.org/x/tools/internal/lsp.RunServerOnPort.func1()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/server.go:49 +0xb7
Goroutine 9 (running) created at:
golang.org/x/tools/internal/lsp.(*server).cacheAndDiagnose()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/diagnostics.go:23 +0x14e
golang.org/x/tools/internal/lsp.(*server).DidOpen()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/server.go:176 +0xae
golang.org/x/tools/internal/lsp/protocol.serverHandler.func1()
/home/pwaller/.local/src/golang.org/x/tools/internal/lsp/protocol/server.go:147 +0x1e37
golang.org/x/tools/internal/jsonrpc2.(*Conn).run()
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:321 +0xa39
golang.org/x/tools/internal/jsonrpc2.NewConn.func4()
/home/pwaller/.local/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:110 +0x50
==================
/cc @stamblerre