1
0
mirror of https://github.com/golang/go synced 2024-11-23 04:20:03 -07:00

go/token: add test for concurrent use of FileSet.Pos

Update #4354.

Add a test to expose the race in the FileSet position cache.

R=dvyukov, gri
CC=fullung, golang-dev
https://golang.org/cl/6940078
This commit is contained in:
Dave Cheney 2012-12-18 16:38:00 -08:00 committed by Robert Griesemer
parent 4ea8538c7f
commit 4e406a2372

View File

@ -6,6 +6,8 @@ package token
import (
"fmt"
"math/rand"
"sync"
"testing"
)
@ -179,3 +181,26 @@ func TestFiles(t *testing.T) {
}
}
}
// issue 4345. Test concurrent use of FileSet.Pos does not trigger a
// race in the FileSet position cache.
func TestFileSetRace(t *testing.T) {
fset := NewFileSet()
for i := 0; i < 100; i++ {
fset.AddFile(fmt.Sprintf("file-%d", i), fset.Base(), 1031)
}
max := int32(fset.Base())
var stop sync.WaitGroup
r := rand.New(rand.NewSource(7))
for i := 0; i < 2; i++ {
r := rand.New(rand.NewSource(r.Int63()))
stop.Add(1)
go func() {
for i := 0; i < 1000; i++ {
fset.Position(Pos(r.Int31n(max)))
}
stop.Done()
}()
}
stop.Wait()
}