diff options
author | Russ Cox <rsc@golang.org> | 2010-03-26 14:15:30 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2010-03-26 14:15:30 -0700 |
commit | 4e28cfe970dad5b5394340f69f131d0e6d3fd678 (patch) | |
tree | 87a976f48acc171305eb7783d22b824092508b68 /test/mallocfin.go | |
parent | 1ec91c8d1d871a8aa3243efef1d329d95e447293 (diff) | |
download | go-4e28cfe970dad5b5394340f69f131d0e6d3fd678.tar.gz go-4e28cfe970dad5b5394340f69f131d0e6d3fd678.zip |
runtime: run all finalizers in a single goroutine.
eliminate second pass of mark+sweep
by scanning finalizer table specially.
R=r
CC=golang-dev
https://golang.org/cl/782041
Diffstat (limited to 'test/mallocfin.go')
-rw-r--r-- | test/mallocfin.go | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/test/mallocfin.go b/test/mallocfin.go index da3253a04f..44229d490c 100644 --- a/test/mallocfin.go +++ b/test/mallocfin.go @@ -8,7 +8,10 @@ package main -import "runtime" +import ( + "runtime" + "time" +) const N = 250 @@ -25,12 +28,14 @@ var i int var nfinal int var final [N]int -func finalA(a *A) { +// the unused return is to test finalizers with return values +func finalA(a *A) (unused [N]int) { if final[a.n] != 0 { println("finalA", a.n, final[a.n]) panic("fail") } final[a.n] = 1 + return } func finalB(b *B) { @@ -53,6 +58,7 @@ func main() { for i := 0; i < N; i++ { runtime.GC() runtime.Gosched() + time.Sleep(1e6); } if nfinal < N*8/10 { panic("not enough finalizing:", nfinal, "/", N) |