Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/tools/internal/lsp/cache: data race in (*view).loadParseTypecheck #33978

Closed
bcmills opened this issue Aug 30, 2019 · 3 comments
Closed

x/tools/internal/lsp/cache: data race in (*view).loadParseTypecheck #33978

bcmills opened this issue Aug 30, 2019 · 3 comments
Labels
FrozenDueToAge gopls Issues related to the Go language server, gopls. NeedsFix The path to resolution is known, but the work has not been done.
Milestone

Comments

@bcmills
Copy link
Contributor

bcmills commented Aug 30, 2019

https://storage.googleapis.com/go-build-log/87113f7e/linux-amd64-race_c984f656.log

linux-amd64-race at 87113f7eadf6d8b12279709f05c0359b54b194ea building tools at 38012fa3e4a4951c4c3524a0fdac73fef0d9d2c6
[…]
==================
WARNING: DATA RACE
Write at 0x00c0007cb680 by goroutine 176:
  runtime.mapassign_faststr()
      /workdir/go/src/runtime/map_faststr.go:202 +0x0
  golang.org/x/tools/internal/lsp/cache.(*view).link()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:238 +0x6bd
  golang.org/x/tools/internal/lsp/cache.(*view).checkMetadata()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:103 +0x82f
  golang.org/x/tools/internal/lsp/cache.(*view).load()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:64 +0x1b4
  golang.org/x/tools/internal/lsp/cache.(*view).loadParseTypecheck()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:22 +0x7a
  golang.org/x/tools/internal/lsp/cache.(*goFile).GetCheckPackageHandles()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/gofile.go:131 +0x5ba
  golang.org/x/tools/internal/lsp/cache.(*goFile).GetCheckPackageHandle()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/gofile.go:150 +0x6a
  golang.org/x/tools/internal/lsp/source.Diagnostics()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/source/diagnostics.go:73 +0x1f8
  golang.org/x/tools/internal/lsp.(*Server).Diagnostics()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/diagnostics.go:30 +0x25b
  golang.org/x/tools/internal/lsp.(*Server).didOpen.func1()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/text_synchronization.go:39 +0x12e

Previous read at 0x00c0007cb680 by goroutine 94:
  runtime.mapiterinit()
      /workdir/go/src/runtime/map.go:802 +0x0
  golang.org/x/tools/internal/lsp/cache.(*view).loadParseTypecheck()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:26 +0xd6
  golang.org/x/tools/internal/lsp/cache.(*goFile).GetCheckPackageHandles()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/gofile.go:131 +0x5ba
  golang.org/x/tools/internal/lsp/cache.(*goFile).GetCheckPackageHandle()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/gofile.go:150 +0x6a
  golang.org/x/tools/internal/lsp/source.Diagnostics()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/source/diagnostics.go:73 +0x1f8
  golang.org/x/tools/internal/lsp.(*Server).Diagnostics()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/diagnostics.go:30 +0x25b
  golang.org/x/tools/internal/lsp.(*Server).didOpen.func1()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/text_synchronization.go:39 +0x12e

Goroutine 176 (running) created at:
  golang.org/x/tools/internal/lsp.(*Server).didOpen()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/text_synchronization.go:35 +0x2ac
  golang.org/x/tools/internal/lsp.(*Server).DidOpen()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/server.go:150 +0x56
  golang.org/x/tools/internal/lsp/protocol.serverHandler.Deliver()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/protocol/tsserver.go:112 +0x2311
  golang.org/x/tools/internal/lsp/protocol.(*serverHandler).Deliver()
      <autogenerated>:1 +0x94
  golang.org/x/tools/internal/jsonrpc2.(*Conn).Run.func1()
      /workdir/gopath/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:370 +0x1c5

Goroutine 94 (running) created at:
  golang.org/x/tools/internal/lsp.(*Server).didOpen()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/text_synchronization.go:35 +0x2ac
  golang.org/x/tools/internal/lsp.(*Server).DidOpen()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/server.go:150 +0x56
  golang.org/x/tools/internal/lsp/protocol.serverHandler.Deliver()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/protocol/tsserver.go:112 +0x2311
  golang.org/x/tools/internal/lsp/protocol.(*serverHandler).Deliver()
      <autogenerated>:1 +0x94
  golang.org/x/tools/internal/jsonrpc2.(*Conn).Run.func1()
      /workdir/gopath/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:370 +0x1c5
==================
==================
WARNING: DATA RACE
Write at 0x00c0003b22f8 by goroutine 176:
  golang.org/x/tools/internal/lsp/cache.(*view).link()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:238 +0x6d5
  golang.org/x/tools/internal/lsp/cache.(*view).checkMetadata()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:103 +0x82f
  golang.org/x/tools/internal/lsp/cache.(*view).load()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:64 +0x1b4
  golang.org/x/tools/internal/lsp/cache.(*view).loadParseTypecheck()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:22 +0x7a
  golang.org/x/tools/internal/lsp/cache.(*goFile).GetCheckPackageHandles()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/gofile.go:131 +0x5ba
  golang.org/x/tools/internal/lsp/cache.(*goFile).GetCheckPackageHandle()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/gofile.go:150 +0x6a
  golang.org/x/tools/internal/lsp/source.Diagnostics()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/source/diagnostics.go:73 +0x1f8
  golang.org/x/tools/internal/lsp.(*Server).Diagnostics()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/diagnostics.go:30 +0x25b
  golang.org/x/tools/internal/lsp.(*Server).didOpen.func1()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/text_synchronization.go:39 +0x12e

Previous read at 0x00c0003b22f8 by goroutine 94:
  golang.org/x/tools/internal/lsp/cache.(*view).loadParseTypecheck()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:26 +0x113
  golang.org/x/tools/internal/lsp/cache.(*goFile).GetCheckPackageHandles()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/gofile.go:131 +0x5ba
  golang.org/x/tools/internal/lsp/cache.(*goFile).GetCheckPackageHandle()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/gofile.go:150 +0x6a
  golang.org/x/tools/internal/lsp/source.Diagnostics()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/source/diagnostics.go:73 +0x1f8
  golang.org/x/tools/internal/lsp.(*Server).Diagnostics()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/diagnostics.go:30 +0x25b
  golang.org/x/tools/internal/lsp.(*Server).didOpen.func1()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/text_synchronization.go:39 +0x12e

Goroutine 176 (running) created at:
  golang.org/x/tools/internal/lsp.(*Server).didOpen()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/text_synchronization.go:35 +0x2ac
  golang.org/x/tools/internal/lsp.(*Server).DidOpen()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/server.go:150 +0x56
  golang.org/x/tools/internal/lsp/protocol.serverHandler.Deliver()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/protocol/tsserver.go:112 +0x2311
  golang.org/x/tools/internal/lsp/protocol.(*serverHandler).Deliver()
      <autogenerated>:1 +0x94
  golang.org/x/tools/internal/jsonrpc2.(*Conn).Run.func1()
      /workdir/gopath/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:370 +0x1c5

Goroutine 94 (running) created at:
  golang.org/x/tools/internal/lsp.(*Server).didOpen()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/text_synchronization.go:35 +0x2ac
  golang.org/x/tools/internal/lsp.(*Server).DidOpen()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/server.go:150 +0x56
  golang.org/x/tools/internal/lsp/protocol.serverHandler.Deliver()
      /workdir/gopath/src/golang.org/x/tools/internal/lsp/protocol/tsserver.go:112 +0x2311
  golang.org/x/tools/internal/lsp/protocol.(*serverHandler).Deliver()
      <autogenerated>:1 +0x94
  golang.org/x/tools/internal/jsonrpc2.(*Conn).Run.func1()
      /workdir/gopath/src/golang.org/x/tools/internal/jsonrpc2/jsonrpc2.go:370 +0x1c5
==================

CC @stamblerre @ianthehat

@bcmills bcmills added the NeedsFix The path to resolution is known, but the work has not been done. label Aug 30, 2019
@gopherbot gopherbot added this to the Unreleased milestone Aug 30, 2019
@gopherbot
Copy link

Thank you for filing a gopls issue! Please take a look at the Troubleshooting section of the gopls Wiki page, and make sure that you have provided all of the relevant information here.

@gopherbot gopherbot added the gopls Issues related to the Go language server, gopls. label Aug 30, 2019
@gopherbot
Copy link

Change https://golang.org/cl/193637 mentions this issue: internal/lsp/cache: fix race condition in package loading

@gopherbot
Copy link

Change https://golang.org/cl/193717 mentions this issue: internal/lsp/cache: fix race condition in type-checking

@golang golang locked and limited conversation to collaborators Sep 4, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge gopls Issues related to the Go language server, gopls. NeedsFix The path to resolution is known, but the work has not been done.
Projects
None yet
Development

No branches or pull requests

2 participants