Skip to content

Commit 944083a

Browse files
authored
Unify locks used on checkers between exclusive pool borrows and EmitResolver scopes (#2080)
1 parent dedfbd9 commit 944083a

File tree

5 files changed

+11
-8
lines changed

5 files changed

+11
-8
lines changed

internal/checker/checker.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -857,9 +857,11 @@ type Checker struct {
857857
activeTypeMappersCaches []map[string]*Type
858858
ambientModulesOnce sync.Once
859859
ambientModules []*ast.Symbol
860+
861+
mu sync.Mutex
860862
}
861863

862-
func NewChecker(program Program) *Checker {
864+
func NewChecker(program Program) (*Checker, *sync.Mutex) {
863865
program.BindSourceFiles()
864866

865867
c := &Checker{}
@@ -1071,7 +1073,7 @@ func NewChecker(program Program) *Checker {
10711073
c.initializeClosures()
10721074
c.initializeIterationResolvers()
10731075
c.initializeChecker()
1074-
return c
1076+
return c, &c.mu
10751077
}
10761078

10771079
func createFileIndexMap(files []*ast.SourceFile) map[*ast.SourceFile]int {

internal/checker/emitresolver.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type DeclarationFileLinks struct {
3434

3535
type EmitResolver struct {
3636
checker *Checker
37-
checkerMu sync.Mutex
37+
checkerMu *sync.Mutex
3838
isValueAliasDeclaration func(node *ast.Node) bool
3939
aliasMarkingVisitor func(node *ast.Node) bool
4040
referenceResolver binder.ReferenceResolver
@@ -47,6 +47,7 @@ func newEmitResolver(checker *Checker) *EmitResolver {
4747
e := &EmitResolver{checker: checker}
4848
e.isValueAliasDeclaration = e.isValueAliasDeclarationWorker
4949
e.aliasMarkingVisitor = e.aliasMarkingVisitorWorker
50+
e.checkerMu = &checker.mu
5051
return e
5152
}
5253

internal/compiler/checkerpool.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ type checkerPool struct {
2626

2727
createCheckersOnce sync.Once
2828
checkers []*checker.Checker
29-
locks []sync.Mutex
29+
locks []*sync.Mutex
3030
fileAssociations map[*ast.SourceFile]*checker.Checker
3131
}
3232

@@ -37,7 +37,7 @@ func newCheckerPool(checkerCount int, program *Program) *checkerPool {
3737
program: program,
3838
checkerCount: checkerCount,
3939
checkers: make([]*checker.Checker, checkerCount),
40-
locks: make([]sync.Mutex, checkerCount),
40+
locks: make([]*sync.Mutex, checkerCount),
4141
}
4242

4343
return pool
@@ -74,7 +74,7 @@ func (p *checkerPool) createCheckers() {
7474
wg := core.NewWorkGroup(p.program.SingleThreaded())
7575
for i := range p.checkerCount {
7676
wg.Queue(func() {
77-
p.checkers[i] = checker.NewChecker(p.program)
77+
p.checkers[i], p.locks[i] = checker.NewChecker(p.program)
7878
})
7979
}
8080

internal/project/checkerpool.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ func (p *CheckerPool) isFullLocked() bool {
218218
func (p *CheckerPool) createCheckerLocked() (*checker.Checker, int) {
219219
for i, existing := range p.checkers {
220220
if existing == nil {
221-
checker := checker.NewChecker(p.program)
221+
checker, _ := checker.NewChecker(p.program)
222222
p.checkers[i] = checker
223223
return checker, i
224224
}

internal/transformers/tstransforms/importelision_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ func TestImportElision(t *testing.T) {
213213

214214
compilerOptions := &core.CompilerOptions{}
215215

216-
c := checker.NewChecker(&fakeProgram{
216+
c, _ := checker.NewChecker(&fakeProgram{
217217
singleThreaded: true,
218218
compilerOptions: compilerOptions,
219219
files: files,

0 commit comments

Comments
 (0)