aboutsummaryrefslogtreecommitdiff
path: root/src/testing/testing.go
diff options
context:
space:
mode:
authorJoe Tsai <joetsai@digital-static.net>2017-01-21 20:07:26 -0800
committerJoe Tsai <thebrokentoaster@gmail.com>2017-02-01 19:27:39 +0000
commit7f31971f594edbacbdba5407aaee042850fbd220 (patch)
treeb37a3932156d4d78c42b4a1408153e511618c653 /src/testing/testing.go
parent048b8cecc6e74b50205e803ca387ffaa7e9f37fe (diff)
downloadgo-7f31971f594edbacbdba5407aaee042850fbd220.tar.xz
testing: synchronize writes to the root's Writer
Prior to this change it was possible to see interleaved messages: <<< === RUN Test/LongLongLongLongName48 === RUN Test/LongLon=== RUN Test/LongLongLongLongName50 gLongLongName49 === RUN Test/LongLongLongLongName51 >>> This change fixes it such that you see: <<< === RUN Test/LongLongLongLongName48 === RUN Test/LongLongLongLongName49 === RUN Test/LongLongLongLongName50 === RUN Test/LongLongLongLongName51 >>> Fixes #18741 Change-Id: I2529d724065dc65b3e9eb3d7cbeeda82a2d0cfd4 Reviewed-on: https://go-review.googlesource.com/35556 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com>
Diffstat (limited to 'src/testing/testing.go')
-rw-r--r--src/testing/testing.go4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/testing/testing.go b/src/testing/testing.go
index bd19a31c27..5efbc244fe 100644
--- a/src/testing/testing.go
+++ b/src/testing/testing.go
@@ -259,7 +259,7 @@ var (
// common holds the elements common between T and B and
// captures common methods such as Errorf.
type common struct {
- mu sync.RWMutex // guards output, failed, and done.
+ mu sync.RWMutex // guards output, w, failed, and done.
output []byte // Output generated by test or benchmark.
w io.Writer // For flushToParent.
chatty bool // A copy of the chatty flag.
@@ -687,7 +687,9 @@ func (t *T) Run(name string, f func(t *T)) bool {
root := t.parent
for ; root.parent != nil; root = root.parent {
}
+ root.mu.Lock()
fmt.Fprintf(root.w, "=== RUN %s\n", t.name)
+ root.mu.Unlock()
}
// Instead of reducing the running count of this test before calling the
// tRunner and increasing it afterwards, we rely on tRunner keeping the