From f395e878887df1a28966353f32f5ee70973c8f3f Mon Sep 17 00:00:00 2001 From: David Lazar Date: Fri, 27 Jan 2017 15:24:48 -0500 Subject: [PATCH] io: fix test when MultiReader is inlined with -l=3 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 TryBot-Result: Gobot Gobot Reviewed-by: Austin Clements Reviewed-by: Russ Cox --- src/io/multi_test.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/io/multi_test.go b/src/io/multi_test.go index 1a6292fa8a..710776ad24 100644 --- a/src/io/multi_test.go +++ b/src/io/multi_test.go @@ -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" { -- 2.48.1