aboutsummaryrefslogtreecommitdiff
path: root/test/mallocfin.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-03-26 14:15:30 -0700
committerRuss Cox <rsc@golang.org>2010-03-26 14:15:30 -0700
commit4e28cfe970dad5b5394340f69f131d0e6d3fd678 (patch)
tree87a976f48acc171305eb7783d22b824092508b68 /test/mallocfin.go
parent1ec91c8d1d871a8aa3243efef1d329d95e447293 (diff)
downloadgo-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.go10
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)