From d78a1f2664a08ffcd20fbbc90d95df4fffa60547 Mon Sep 17 00:00:00 2001 From: Ilya Sinelnikov Date: Wed, 23 Oct 2019 09:53:20 +0000 Subject: [PATCH] tools/go/analysis: Fix datarace in set of analysis.Fact Fixes https://github.com/golang/go/issues/35098 Change-Id: I732edd5129de055138dc22e5e71f8ca3560d13e0 GitHub-Last-Rev: 3582f7669d70c48c5773ecf98f065f77be26c27f GitHub-Pull-Request: golang/tools#179 Reviewed-on: https://go-review.googlesource.com/c/tools/+/202718 Reviewed-by: Michael Matloob --- go/analysis/internal/facts/facts.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/go/analysis/internal/facts/facts.go b/go/analysis/internal/facts/facts.go index 07984521c3..1fb69c6159 100644 --- a/go/analysis/internal/facts/facts.go +++ b/go/analysis/internal/facts/facts.go @@ -101,11 +101,13 @@ func (s *Set) ExportObjectFact(obj types.Object, fact analysis.Fact) { func (s *Set) AllObjectFacts(filter map[reflect.Type]bool) []analysis.ObjectFact { var facts []analysis.ObjectFact + s.mu.Lock() for k, v := range s.m { if k.obj != nil && filter[k.t] { facts = append(facts, analysis.ObjectFact{Object: k.obj, Fact: v}) } } + s.mu.Unlock() return facts } @@ -134,11 +136,13 @@ func (s *Set) ExportPackageFact(fact analysis.Fact) { func (s *Set) AllPackageFacts(filter map[reflect.Type]bool) []analysis.PackageFact { var facts []analysis.PackageFact + s.mu.Lock() for k, v := range s.m { if k.obj == nil && filter[k.t] { facts = append(facts, analysis.PackageFact{Package: k.pkg, Fact: v}) } } + s.mu.Unlock() return facts }