Skip to content

Data race in watchedFiles update #1163

@jakebailey

Description

@jakebailey

Seems like this code doesn't guard against concurrent update.

WARNING: DATA RACE
Write at 0x00c000293560 by goroutine 1005:
  runtime.mapassign_faststr()
      /usr/local/go/src/internal/runtime/maps/runtime_faststr_swiss.go:263 +0x0
  github.com/microsoft/typescript-go/internal/collections.(*Set[go.shape.string]).Add()
      /home/jabaile/work/TypeScript-go/internal/collections/set.go:23 +0x4ea
  github.com/microsoft/typescript-go/internal/lsp.(*Server).WatchFiles()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:214 +0x432
  github.com/microsoft/typescript-go/internal/project.(*watchedFiles[go.shape.[]string]).update()
      /home/jabaile/work/TypeScript-go/internal/project/watch.go:85 +0xbc1
  github.com/microsoft/typescript-go/internal/project.(*ConfigFileRegistry).updateRootFilesWatch()
      /home/jabaile/work/TypeScript-go/internal/project/configfileregistry.go:134 +0x990
  github.com/microsoft/typescript-go/internal/project.(*ConfigFileRegistry).AcquireConfig()
      /home/jabaile/work/TypeScript-go/internal/project/configfileregistry.go:111 +0x5c4
  github.com/microsoft/typescript-go/internal/project.(*Project).GetResolvedProjectReference()
      /home/jabaile/work/TypeScript-go/internal/project/project.go:290 +0x88
  github.com/microsoft/typescript-go/internal/compiler.(*projectReferenceParseTask).start()
      /home/jabaile/work/TypeScript-go/internal/compiler/projectreferenceparsetask.go:19 +0xde
  github.com/microsoft/typescript-go/internal/compiler.(*fileLoaderWorker[go.shape.*github.com/microsoft/typescript-go/internal/compiler.projectReferenceParseTask]).start.func1()
      /home/jabaile/work/TypeScript-go/internal/compiler/fileloadertask.go:35 +0x63
  github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue.func1()
      /home/jabaile/work/TypeScript-go/internal/core/workgroup.go:39 +0x8d

Previous write at 0x00c000293560 by goroutine 1006:
  runtime.mapassign_faststr()
      /usr/local/go/src/internal/runtime/maps/runtime_faststr_swiss.go:263 +0x0
  github.com/microsoft/typescript-go/internal/collections.(*Set[go.shape.string]).Add()
      /home/jabaile/work/TypeScript-go/internal/collections/set.go:23 +0x4ea
  github.com/microsoft/typescript-go/internal/lsp.(*Server).WatchFiles()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:214 +0x432
  github.com/microsoft/typescript-go/internal/project.(*watchedFiles[go.shape.[]string]).update()
      /home/jabaile/work/TypeScript-go/internal/project/watch.go:85 +0xbc1
  github.com/microsoft/typescript-go/internal/project.(*ConfigFileRegistry).updateRootFilesWatch()
      /home/jabaile/work/TypeScript-go/internal/project/configfileregistry.go:134 +0x990
  github.com/microsoft/typescript-go/internal/project.(*ConfigFileRegistry).AcquireConfig()
      /home/jabaile/work/TypeScript-go/internal/project/configfileregistry.go:111 +0x5c4
  github.com/microsoft/typescript-go/internal/project.(*Project).GetResolvedProjectReference()
      /home/jabaile/work/TypeScript-go/internal/project/project.go:290 +0x88
  github.com/microsoft/typescript-go/internal/compiler.(*projectReferenceParseTask).start()
      /home/jabaile/work/TypeScript-go/internal/compiler/projectreferenceparsetask.go:19 +0xde
  github.com/microsoft/typescript-go/internal/compiler.(*fileLoaderWorker[go.shape.*github.com/microsoft/typescript-go/internal/compiler.projectReferenceParseTask]).start.func1()
      /home/jabaile/work/TypeScript-go/internal/compiler/fileloadertask.go:35 +0x63
  github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue.func1()
      /home/jabaile/work/TypeScript-go/internal/core/workgroup.go:39 +0x8d

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions