mirror of
https://github.com/golang/go
synced 2024-11-18 02:54:47 -07:00
runtime: test a frameless function for async preemption
Frameless function is an interesting case for call injection espcially for LR architectures. Extend the test for this case. Change-Id: I074090d09eeaf642e71e3f44fea216f66d39b817 Reviewed-on: https://go-review.googlesource.com/c/go/+/202339 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
a866b48e4a
commit
11db7e4469
20
src/runtime/testdata/testprog/preempt.go
vendored
20
src/runtime/testdata/testprog/preempt.go
vendored
@ -22,16 +22,23 @@ func AsyncPreempt() {
|
|||||||
debug.SetGCPercent(-1)
|
debug.SetGCPercent(-1)
|
||||||
|
|
||||||
// Start a goroutine with no sync safe-points.
|
// Start a goroutine with no sync safe-points.
|
||||||
var ready uint32
|
var ready, ready2 uint32
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
atomic.StoreUint32(&ready, 1)
|
atomic.StoreUint32(&ready, 1)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
// Also start one with a frameless function.
|
||||||
|
// This is an especially interesting case for
|
||||||
|
// LR machines.
|
||||||
|
go func() {
|
||||||
|
atomic.StoreUint32(&ready2, 1)
|
||||||
|
frameless()
|
||||||
|
}()
|
||||||
|
|
||||||
// Wait for the goroutine to stop passing through sync
|
// Wait for the goroutine to stop passing through sync
|
||||||
// safe-points.
|
// safe-points.
|
||||||
for atomic.LoadUint32(&ready) == 0 {
|
for atomic.LoadUint32(&ready) == 0 || atomic.LoadUint32(&ready2) == 0 {
|
||||||
runtime.Gosched()
|
runtime.Gosched()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,3 +49,12 @@ func AsyncPreempt() {
|
|||||||
|
|
||||||
println("OK")
|
println("OK")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:noinline
|
||||||
|
func frameless() {
|
||||||
|
for i := int64(0); i < 1<<62; i++ {
|
||||||
|
out += i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var out int64
|
||||||
|
Loading…
Reference in New Issue
Block a user