runtime: fix finalizer test on amd64

Not scanning the stack by frames means we are reintroducing
a few false positives into the collection. Run the finalizer registration
in its own goroutine so that stack is guaranteed to be out of
consideration in a later collection.

This is working around a regression from yesterday's tip, but
it's not a regression from Go 1.1.

R=golang-dev
TBR=golang-dev
CC=golang-dev
https://golang.org/cl/14290043
diff --git a/src/pkg/runtime/mfinal_test.go b/src/pkg/runtime/mfinal_test.go
index ae06dd29..6efef9b 100644
--- a/src/pkg/runtime/mfinal_test.go
+++ b/src/pkg/runtime/mfinal_test.go
@@ -46,17 +46,18 @@
 	}
 
 	for _, tt := range finalizerTests {
-		func() {
+		go func() {
 			v := new(int)
 			*v = 97531
 			runtime.SetFinalizer(tt.convert(v), tt.finalizer)
 			v = nil
 		}()
+		time.Sleep(1 * time.Second)
 		runtime.GC()
 		select {
 		case <-ch:
 		case <-time.After(time.Second * 4):
-			t.Errorf("Finalizer of type %T didn't run", tt.finalizer)
+			t.Errorf("finalizer for type %T didn't run", tt.finalizer)
 		}
 	}
 }
@@ -72,25 +73,27 @@
 		t.Skipf("Skipping on non-amd64 machine")
 	}
 	ch := make(chan bool)
-	func() {
+	go func() {
 		v := &bigValue{0xDEADBEEFDEADBEEF, true, "It matters not how strait the gate"}
+		old := *v
 		runtime.SetFinalizer(v, func(v interface{}) {
 			i, ok := v.(*bigValue)
 			if !ok {
-				t.Errorf("Expected *bigValue from interface{} in finalizer, got %v", *i)
+				t.Errorf("finalizer called with type %T, want *bigValue", v)
 			}
-			if i.fill != 0xDEADBEEFDEADBEEF && i.it != true && i.up != "It matters not how strait the gate" {
-				t.Errorf("*bigValue from interface{} has the wrong value: %v\n", *i)
+			if *i != old {
+				t.Errorf("finalizer called with %+v, want %+v", *i, old)
 			}
 			close(ch)
 		})
 		v = nil
 	}()
+	time.Sleep(1 * time.Second)
 	runtime.GC()
 	select {
 	case <-ch:
-	case <-time.After(time.Second * 4):
-		t.Errorf("Finalizer set by SetFinalizer(*bigValue, func(interface{})) didn't run")
+	case <-time.After(4 * time.Second):
+		t.Errorf("finalizer for type *bigValue didn't run")
 	}
 }