runtime: add a test for asynchronous safe points

This adds a test of preempting a loop containing no synchronous safe
points for STW and stack scanning.

We couldn't add this test earlier because it requires scheduler, STW,
and stack scanning preemption to all be working.

For #10958, #24543.

Change-Id: I73292db78ca3d14aab11bdafd26d03986920ef0a
Reviewed-on: https://go-review.googlesource.com/c/go/+/201777
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
Austin Clements 2019-04-25 14:10:29 -04:00
parent 177a36a5dc
commit 7955ecebfc
3 changed files with 57 additions and 0 deletions

View file

@ -356,6 +356,17 @@ func TestPreemptionGC(t *testing.T) {
atomic.StoreUint32(&stop, 1)
}
func TestAsyncPreempt(t *testing.T) {
if !runtime.PreemptMSupported {
t.Skip("asynchronous preemption not supported on this platform")
}
output := runTestProg(t, "testprog", "AsyncPreempt")
want := "OK\n"
if output != want {
t.Fatalf("want %s, got %s\n", want, output)
}
}
func TestGCFairness(t *testing.T) {
output := runTestProg(t, "testprog", "GCFairness")
want := "OK\n"