diff options
Diffstat (limited to 'src/runtime/testdata')
| -rw-r--r-- | src/runtime/testdata/testprog/finalizer_deadlock.go | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/runtime/testdata/testprog/finalizer_deadlock.go b/src/runtime/testdata/testprog/finalizer_deadlock.go index a55145fa15..e3131541aa 100644 --- a/src/runtime/testdata/testprog/finalizer_deadlock.go +++ b/src/runtime/testdata/testprog/finalizer_deadlock.go @@ -15,18 +15,24 @@ import ( var finalizerDeadlockMode = flag.String("finalizer-deadlock-mode", "panic", "Trigger mode of FinalizerDeadlock") func init() { - register("FinalizerDeadlock", FinalizerDeadlock) + register("FinalizerDeadlock", func() { FinalizerOrCleanupDeadlock(false) }) + register("CleanupDeadlock", func() { FinalizerOrCleanupDeadlock(true) }) } -func FinalizerDeadlock() { +func FinalizerOrCleanupDeadlock(useCleanup bool) { flag.Parse() started := make(chan struct{}) - b := new([16]byte) - runtime.SetFinalizer(b, func(*[16]byte) { + fn := func() { started <- struct{}{} select {} - }) + } + b := new([16]byte) + if useCleanup { + runtime.AddCleanup(b, func(struct{}) { fn() }, struct{}{}) + } else { + runtime.SetFinalizer(b, func(*[16]byte) { fn() }) + } b = nil runtime.GC() |
