]> Cypherpunks repositories - gostls13.git/commitdiff
io: fix test when MultiReader is inlined with -l=3
authorDavid Lazar <lazard@golang.org>
Fri, 27 Jan 2017 20:24:48 +0000 (15:24 -0500)
committerDavid Lazar <lazard@golang.org>
Thu, 2 Feb 2017 18:56:20 +0000 (18:56 +0000)
This ensures there isn't a live reference to buf1 on our stack
when MultiReader is inlined.

Fixes #18819.

Change-Id: I96a8cdc1ffad8f8a10c0ddcbf0299005f3176b61
Reviewed-on: https://go-review.googlesource.com/35931
Run-TryBot: David Lazar <lazard@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Reviewed-by: Russ Cox <rsc@golang.org>
src/io/multi_test.go

index 1a6292fa8ac2c59c0bfae489d304d7fb76e4fa7d..710776ad24af1e6aa76418794dfdfa2d29b112a0 100644 (file)
@@ -239,14 +239,17 @@ func TestMultiReaderFinalEOF(t *testing.T) {
 func TestMultiReaderFreesExhaustedReaders(t *testing.T) {
        var mr Reader
        closed := make(chan struct{})
-       {
+       // The closure ensures that we don't have a live reference to buf1
+       // on our stack after MultiReader is inlined (Issue 18819).  This
+       // is a work around for a limitation in liveness analysis.
+       func() {
                buf1 := bytes.NewReader([]byte("foo"))
                buf2 := bytes.NewReader([]byte("bar"))
                mr = MultiReader(buf1, buf2)
                runtime.SetFinalizer(buf1, func(*bytes.Reader) {
                        close(closed)
                })
-       }
+       }()
 
        buf := make([]byte, 4)
        if n, err := ReadFull(mr, buf); err != nil || string(buf) != "foob" {