aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/testdata
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime/testdata')
-rw-r--r--src/runtime/testdata/testprog/finalizer_deadlock.go16
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()