Skip to content

Data race in ScriptInfo between setText and Version #1161

Open
@jakebailey

Description

@jakebailey
Member

I built tsgo with --race and then pointed VS Code at it. Hitting space a couple of times in checker.ts netted:

WARNING: DATA RACE
Read at 0x00c00028c868 by goroutine 487:
  github.com/microsoft/typescript-go/internal/project.(*ScriptInfo).Version()
      /home/jabaile/work/TypeScript-go/internal/project/scriptinfo.go:70 +0x10c
  github.com/microsoft/typescript-go/internal/project.(*snapshot).GetLineMap()
      /home/jabaile/work/TypeScript-go/internal/project/project.go:51 +0x12
  github.com/microsoft/typescript-go/internal/ls.Host.GetLineMap-fm()
      <autogenerated>:1 +0x59
  github.com/microsoft/typescript-go/internal/ls.(*Converters).LineAndCharacterToPosition()
      /home/jabaile/work/TypeScript-go/internal/ls/converters.go:178 +0x8f
  github.com/microsoft/typescript-go/internal/ls.(*LanguageService).ProvideCompletion()
      /home/jabaile/work/TypeScript-go/internal/ls/completions.go:43 +0xe9
  github.com/microsoft/typescript-go/internal/lsp.(*Server).handleCompletion()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:715 +0x3dd
  github.com/microsoft/typescript-go/internal/lsp.(*Server).handleRequestOrNotification()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:481 +0x288
  github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop.func1()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:364 +0x109

Previous write at 0x00c00028c868 by goroutine 10:
  github.com/microsoft/typescript-go/internal/project.(*ScriptInfo).setText()
      /home/jabaile/work/TypeScript-go/internal/project/scriptinfo.go:121 +0x14f
  github.com/microsoft/typescript-go/internal/project.(*ScriptInfo).editContent()
      /home/jabaile/work/TypeScript-go/internal/project/scriptinfo.go:178 +0xe2
  github.com/microsoft/typescript-go/internal/project.(*Service).applyChangesToFile()
      /home/jabaile/work/TypeScript-go/internal/project/service.go:408 +0x4e4
  github.com/microsoft/typescript-go/internal/project.(*Service).ChangeFile()
      /home/jabaile/work/TypeScript-go/internal/project/service.go:270 +0x490
  github.com/microsoft/typescript-go/internal/lsp.(*Server).handleDidChange()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:605 +0x1d6
  github.com/microsoft/typescript-go/internal/lsp.(*Server).handleRequestOrNotification()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:467 +0x1e1
  github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop.func1()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:364 +0x109
  github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:380 +0x687
  github.com/microsoft/typescript-go/internal/lsp.(*Server).Run.func1()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:256 +0x46
  golang.org/x/sync/errgroup.(*Group).add.func1()
      /home/jabaile/go/pkg/mod/golang.org/x/sync@v0.14.0/errgroup/errgroup.go:130 +0x141

Activity

jakebailey

jakebailey commented on Jun 11, 2025

@jakebailey
MemberAuthor
WARNING: DATA RACE
Write at 0x00c00028c858 by goroutine 10:
  github.com/microsoft/typescript-go/internal/project.(*ScriptInfo).setText()
      /home/jabaile/work/TypeScript-go/internal/project/scriptinfo.go:120 +0xec
  github.com/microsoft/typescript-go/internal/project.(*ScriptInfo).editContent()
      /home/jabaile/work/TypeScript-go/internal/project/scriptinfo.go:178 +0xe2
  github.com/microsoft/typescript-go/internal/project.(*Service).applyChangesToFile()
      /home/jabaile/work/TypeScript-go/internal/project/service.go:408 +0x4e4
  github.com/microsoft/typescript-go/internal/project.(*Service).ChangeFile()
      /home/jabaile/work/TypeScript-go/internal/project/service.go:270 +0x490
  github.com/microsoft/typescript-go/internal/lsp.(*Server).handleDidChange()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:605 +0x1d6
  github.com/microsoft/typescript-go/internal/lsp.(*Server).handleRequestOrNotification()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:467 +0x1e1
  github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop.func1()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:364 +0x109
  github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:380 +0x687
  github.com/microsoft/typescript-go/internal/lsp.(*Server).Run.func1()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:256 +0x46
  golang.org/x/sync/errgroup.(*Group).add.func1()
      /home/jabaile/go/pkg/mod/golang.org/x/sync@v0.14.0/errgroup/errgroup.go:130 +0x141

Previous read at 0x00c00028c858 by goroutine 492:
  github.com/microsoft/typescript-go/internal/project.(*ScriptInfo).Text()
      /home/jabaile/work/TypeScript-go/internal/project/scriptinfo.go:65 +0x99
  github.com/microsoft/typescript-go/internal/project.(*DocumentRegistry).getDocumentWorker()
      /home/jabaile/work/TypeScript-go/internal/project/documentregistry.go:86 +0x7b
  github.com/microsoft/typescript-go/internal/project.(*DocumentRegistry).AcquireDocument()
      /home/jabaile/work/TypeScript-go/internal/project/documentregistry.go:58 +0x147
  github.com/microsoft/typescript-go/internal/project.(*Project).GetSourceFile()
      /home/jabaile/work/TypeScript-go/internal/project/project.go:283 +0x1e7
  github.com/microsoft/typescript-go/internal/compiler.(*Program).UpdateProgram()
      /home/jabaile/work/TypeScript-go/internal/compiler/program.go:228 +0x17c
  github.com/microsoft/typescript-go/internal/project.(*Project).updateProgram()
      /home/jabaile/work/TypeScript-go/internal/project/project.go:594 +0xc44
  github.com/microsoft/typescript-go/internal/project.(*Project).updateGraph()
      /home/jabaile/work/TypeScript-go/internal/project/project.go:508 +0x56c
  github.com/microsoft/typescript-go/internal/project.(*Project).GetProgram()
      /home/jabaile/work/TypeScript-go/internal/project/project.go:295 +0x64
  github.com/microsoft/typescript-go/internal/project.(*Project).GetLanguageServiceForRequest()
      /home/jabaile/work/TypeScript-go/internal/project/project.go:334 +0x52
  github.com/microsoft/typescript-go/internal/lsp.(*Server).handleCompletion()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:704 +0x104
  github.com/microsoft/typescript-go/internal/lsp.(*Server).handleRequestOrNotification()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:481 +0x288
  github.com/microsoft/typescript-go/internal/lsp.(*Server).dispatchLoop.func1()
      /home/jabaile/work/TypeScript-go/internal/lsp/server.go:364 +0x109
added theissue type on Jun 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Data raceDomain: EditorRelated to the LSP server, editor experiencebugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @DanielRosenwasser@jakebailey

      Issue actions

        Data race in ScriptInfo between setText and Version · Issue #1161 · microsoft/typescript-go