Skip to content

x/tools/internal/lsp: data race in cache.buildBuiltinPackage #45868

@bcmills

Description

@bcmills

2021-04-29T19:34:21-aec1372/linux-amd64-race
2021-04-29T19:34:21-aec1372/windows-amd64-race
2021-04-29T13:06:21-28c1392/linux-amd64-race
2021-04-29T13:06:21-28c1392/windows-amd64-race

==================
WARNING: DATA RACE
Read at 0x00c0006088d0 by goroutine 123:
  go/ast.NewPackage()
      C:/workdir/go/src/go/ast/resolve.go:160 +0x5cf
  golang.org/x/tools/internal/lsp/cache.buildBuiltinPackage()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/snapshot.go:1790 +0x2e4
  golang.org/x/tools/internal/lsp/cache.(*snapshot).buildBuiltinPackage()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/snapshot.go:1780 +0x12c
  golang.org/x/tools/internal/lsp/cache.(*snapshot).load()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:151 +0x17cd
  golang.org/x/tools/internal/lsp/cache.(*snapshot).loadWorkspace()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/view.go:580 +0x36d
  golang.org/x/tools/internal/lsp/cache.(*snapshot).initialize.func2()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/view.go:533 +0x5d
  sync.(*Once).doSlow()
      C:/workdir/go/src/sync/once.go:68 +0x127
  sync.(*Once).Do()
      C:/workdir/go/src/sync/once.go:59 +0x46
  golang.org/x/tools/internal/lsp/cache.(*snapshot).initialize()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/view.go:532 +0x27d
  golang.org/x/tools/internal/lsp/cache.(*Session).createView.func4()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/session.go:243 +0x93

Previous write at 0x00c0006088d0 by goroutine 35:
  go/ast.NewPackage()
      C:/workdir/go/src/go/ast/resolve.go:168 +0x635
  golang.org/x/tools/internal/lsp/cache.buildBuiltinPackage()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/snapshot.go:1790 +0x2e4
  golang.org/x/tools/internal/lsp/cache.(*snapshot).buildBuiltinPackage()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/snapshot.go:1780 +0x12c
  golang.org/x/tools/internal/lsp/cache.(*snapshot).load()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/load.go:151 +0x17cd
  golang.org/x/tools/internal/lsp/cache.(*snapshot).loadWorkspace()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/view.go:580 +0x36d
  golang.org/x/tools/internal/lsp/cache.(*snapshot).initialize.func2()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/view.go:533 +0x5d
  sync.(*Once).doSlow()
      C:/workdir/go/src/sync/once.go:68 +0x127
  sync.(*Once).Do()
      C:/workdir/go/src/sync/once.go:59 +0x46
  golang.org/x/tools/internal/lsp/cache.(*snapshot).initialize()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/view.go:532 +0x27d
  golang.org/x/tools/internal/lsp/cache.(*Session).createView.func4()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/session.go:243 +0x93

Goroutine 123 (running) created at:
  golang.org/x/tools/internal/lsp/cache.(*Session).createView()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/session.go:242 +0x1658
  golang.org/x/tools/internal/lsp/cache.(*Session).NewView()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/session.go:152 +0x18f
  golang.org/x/tools/internal/lsp.(*Server).addView()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/workspace.go:59 +0x355
  golang.org/x/tools/internal/lsp.(*Server).addFolders()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/general.go:221 +0x8c8
  golang.org/x/tools/internal/lsp.(*Server).initialized()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/general.go:170 +0x470
  golang.org/x/tools/internal/lsp.(*Server).Initialized()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/server_gen.go:144 +0x54
  golang.org/x/tools/internal/lsp/protocol.serverDispatch()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/protocol/tsserver.go:132 +0x939
  golang.org/x/tools/internal/lsp/protocol.ServerHandler.func1()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/protocol/protocol.go:63 +0xc4
  golang.org/x/tools/internal/lsp/lsprpc.handshaker.func1()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/lsprpc/lsprpc.go:660 +0xe0d
  golang.org/x/tools/internal/jsonrpc2.MustReplyHandler.func1()
      C:/workdir/gopath/src/golang.org/x/tools/internal/jsonrpc2/handler.go:35 +0x19a
  golang.org/x/tools/internal/jsonrpc2.AsyncHandler.func1.2()
      C:/workdir/gopath/src/golang.org/x/tools/internal/jsonrpc2/handler.go:103 +0xbd

Goroutine 35 (running) created at:
  golang.org/x/tools/internal/lsp/cache.(*Session).createView()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/session.go:242 +0x1658
  golang.org/x/tools/internal/lsp/cache.(*Session).NewView()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/cache/session.go:152 +0x18f
  golang.org/x/tools/internal/lsp.(*Server).addView()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/workspace.go:59 +0x355
  golang.org/x/tools/internal/lsp.(*Server).addFolders()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/general.go:221 +0x8c8
  golang.org/x/tools/internal/lsp.(*Server).initialized()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/general.go:170 +0x470
  golang.org/x/tools/internal/lsp.(*Server).Initialized()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/server_gen.go:144 +0x54
  golang.org/x/tools/internal/lsp/protocol.serverDispatch()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/protocol/tsserver.go:132 +0x939
  golang.org/x/tools/internal/lsp/protocol.ServerHandler.func1()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/protocol/protocol.go:63 +0xc4
  golang.org/x/tools/internal/lsp/lsprpc.handshaker.func1()
      C:/workdir/gopath/src/golang.org/x/tools/internal/lsp/lsprpc/lsprpc.go:660 +0xe0d
  golang.org/x/tools/internal/jsonrpc2.MustReplyHandler.func1()
      C:/workdir/gopath/src/golang.org/x/tools/internal/jsonrpc2/handler.go:35 +0x19a
  golang.org/x/tools/internal/jsonrpc2.AsyncHandler.func1.2()
      C:/workdir/gopath/src/golang.org/x/tools/internal/jsonrpc2/handler.go:103 +0xbd
==================

This may be from CL 314290 (CC @findleyr @heschi).

Metadata

Metadata

Assignees

No one assigned

    Labels

    FrozenDueToAgeNeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.SoonThis needs action soon. (recent regressions, service outages, unusual time-sensitive situations)ToolsThis label describes issues relating to any tools in the x/tools repository.goplsIssues related to the Go language server, gopls.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions