mirror of https://github.com/golang/go.git
test: tweak test to avoid unpreemptible loop with gccgo
This test contains a very tight loop with locking/unlocking that can wind up as an unpreemptible when compiled with gccgo, depending on inlining. Tweak the test slightly to avoid this problem. Change-Id: I155fd2b4bfea961244eb6c6594c24ab03d32d41c Reviewed-on: https://go-review.googlesource.com/c/go/+/193619 Run-TryBot: Than McIntosh <thanm@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
d4a6a2661c
commit
c7dc5e92dd
|
|
@ -1950,11 +1950,20 @@ func test27660(t *testing.T) {
|
||||||
// increase the likelihood that the race described in #27660
|
// increase the likelihood that the race described in #27660
|
||||||
// results in corruption of ThreadSanitizer's internal state
|
// results in corruption of ThreadSanitizer's internal state
|
||||||
// and thus an assertion failure or segfault.
|
// and thus an assertion failure or segfault.
|
||||||
|
i := 0
|
||||||
for ctx.Err() == nil {
|
for ctx.Err() == nil {
|
||||||
j := rand.Intn(100)
|
j := rand.Intn(100)
|
||||||
locks[j].Lock()
|
locks[j].Lock()
|
||||||
ints[j]++
|
ints[j]++
|
||||||
locks[j].Unlock()
|
locks[j].Unlock()
|
||||||
|
// needed for gccgo, to avoid creation of an
|
||||||
|
// unpreemptible "fast path" in this loop. Choice
|
||||||
|
// of (1<<24) is somewhat arbitrary.
|
||||||
|
if i%(1<<24) == 0 {
|
||||||
|
runtime.Gosched()
|
||||||
|
}
|
||||||
|
i++
|
||||||
|
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
time.Sleep(time.Millisecond)
|
time.Sleep(time.Millisecond)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue