all: don't call t.Fatal from a goroutine
Fixes #17900.
Change-Id: I42cda6ac9cf48ed739d3a015a90b3cb15edf8ddf
Reviewed-on: https://go-review.googlesource.com/33243
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/src/crypto/tls/handshake_server_test.go b/src/crypto/tls/handshake_server_test.go
index fa93c8a..bcd3d43 100644
--- a/src/crypto/tls/handshake_server_test.go
+++ b/src/crypto/tls/handshake_server_test.go
@@ -206,7 +206,8 @@
buf = make([]byte, 1024)
n, err := c.Read(buf)
if err != nil {
- t.Fatalf("Server read returned error: %s", err)
+ t.Errorf("Server read returned error: %s", err)
+ return
}
buf = buf[:n]
c.Close()
diff --git a/src/crypto/tls/tls_test.go b/src/crypto/tls/tls_test.go
index 1a5286c..8933f4f 100644
--- a/src/crypto/tls/tls_test.go
+++ b/src/crypto/tls/tls_test.go
@@ -295,12 +295,14 @@
for i := 0; i < 2; i++ {
sconn, err := ln.Accept()
if err != nil {
- t.Fatal(err)
+ t.Error(err)
+ return
}
serverConfig := testConfig.Clone()
srv := Server(sconn, serverConfig)
if err := srv.Handshake(); err != nil {
- t.Fatal(err)
+ t.Error(err)
+ return
}
serverTLSUniques <- srv.ConnectionState().TLSUnique
}
diff --git a/src/database/sql/sql_test.go b/src/database/sql/sql_test.go
index f8edf89..ea86264 100644
--- a/src/database/sql/sql_test.go
+++ b/src/database/sql/sql_test.go
@@ -2514,7 +2514,8 @@
go func() {
r, err := db.Query("SELECT|people|name|")
if err != nil {
- t.Fatal(err)
+ t.Error(err)
+ return
}
r.Close()
wg.Done()
diff --git a/src/log/syslog/syslog_test.go b/src/log/syslog/syslog_test.go
index 5df0e47..1263be6 100644
--- a/src/log/syslog/syslog_test.go
+++ b/src/log/syslog/syslog_test.go
@@ -369,7 +369,8 @@
defer wg.Done()
w, err := Dial(net, addr, LOG_USER|LOG_ERR, "tag")
if err != nil {
- t.Fatalf("syslog.Dial() failed: %v", err)
+ t.Errorf("syslog.Dial() failed: %v", err)
+ return
}
defer w.Close()
for i := 0; i < M; i++ {
diff --git a/src/net/dnsclient_unix_test.go b/src/net/dnsclient_unix_test.go
index 8ee64d4..7dc364d 100644
--- a/src/net/dnsclient_unix_test.go
+++ b/src/net/dnsclient_unix_test.go
@@ -668,12 +668,14 @@
b := make([]byte, 512)
n, err := s.Read(b)
if err != nil {
- t.Fatal(err)
+ t.Error(err)
+ return
}
msg := &dnsMsg{}
if !msg.Unpack(b[:n]) {
- t.Fatal("invalid DNS query")
+ t.Error("invalid DNS query")
+ return
}
s.Write([]byte("garbage DNS response packet"))
@@ -682,7 +684,8 @@
msg.id++ // make invalid ID
b, ok := msg.Pack()
if !ok {
- t.Fatal("failed to pack DNS response")
+ t.Error("failed to pack DNS response")
+ return
}
s.Write(b)
@@ -701,7 +704,8 @@
b, ok = msg.Pack()
if !ok {
- t.Fatal("failed to pack DNS response")
+ t.Error("failed to pack DNS response")
+ return
}
s.Write(b)
}()
diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go
index 9715003..767a815 100644
--- a/src/net/http/serve_test.go
+++ b/src/net/http/serve_test.go
@@ -2468,7 +2468,7 @@
defer close(donec)
bs, err := ioutil.ReadAll(conn)
if err != nil {
- t.Fatalf("ReadAll: %v", err)
+ t.Errorf("ReadAll: %v", err)
}
got := string(bs)
if got != "" {
@@ -2620,7 +2620,8 @@
go func() {
_, err = fmt.Fprintf(conn, "GET / HTTP/1.1\r\nConnection: keep-alive\r\nHost: foo\r\n\r\n")
if err != nil {
- t.Fatal(err)
+ t.Error(err)
+ return
}
<-diec
conn.Close()
@@ -2662,7 +2663,8 @@
const req = "GET / HTTP/1.1\r\nConnection: keep-alive\r\nHost: foo\r\n\r\n"
_, err = io.WriteString(conn, req+req) // two requests
if err != nil {
- t.Fatal(err)
+ t.Error(err)
+ return
}
<-diec
conn.Close()
diff --git a/src/net/rpc/server_test.go b/src/net/rpc/server_test.go
index d04271d..8369c9d 100644
--- a/src/net/rpc/server_test.go
+++ b/src/net/rpc/server_test.go
@@ -693,7 +693,8 @@
B := call.Args.(*Args).B
C := call.Reply.(*Reply).C
if A+B != C {
- b.Fatalf("incorrect reply: Add: expected %d got %d", A+B, C)
+ b.Errorf("incorrect reply: Add: expected %d got %d", A+B, C)
+ return
}
<-gate
if atomic.AddInt32(&recv, -1) == 0 {
diff --git a/src/os/exec/exec_test.go b/src/os/exec/exec_test.go
index b143437..67fe14f 100644
--- a/src/os/exec/exec_test.go
+++ b/src/os/exec/exec_test.go
@@ -432,7 +432,7 @@
buf := make([]byte, 512)
n, err := stderr.Read(buf)
if err != nil {
- t.Fatalf("Read: %s", err)
+ t.Errorf("Read: %s", err)
ch <- err.Error()
} else {
ch <- string(buf[:n])
diff --git a/src/runtime/chan_test.go b/src/runtime/chan_test.go
index 8e8c47b..a75fa1b 100644
--- a/src/runtime/chan_test.go
+++ b/src/runtime/chan_test.go
@@ -210,11 +210,14 @@
select {
case <-c:
default:
- t.Fatal("chan is not ready")
+ t.Error("chan is not ready")
}
}()
close(c)
<-c
+ if t.Failed() {
+ return
+ }
}
}
@@ -311,14 +314,16 @@
case c <- p:
case v := <-c:
if chanCap == 0 && v == p {
- t.Fatalf("self receive")
+ t.Errorf("self receive")
+ return
}
}
} else {
select {
case v := <-c:
if chanCap == 0 && v == p {
- t.Fatalf("self receive")
+ t.Errorf("self receive")
+ return
}
case c <- p:
}
diff --git a/src/runtime/trace/trace_stack_test.go b/src/runtime/trace/trace_stack_test.go
index b143341..c37b33d 100644
--- a/src/runtime/trace/trace_stack_test.go
+++ b/src/runtime/trace/trace_stack_test.go
@@ -85,7 +85,8 @@
go func() {
c, err := ln.Accept()
if err != nil {
- t.Fatalf("failed to accept: %v", err)
+ t.Errorf("failed to accept: %v", err)
+ return
}
c.Close()
}()
@@ -139,14 +140,14 @@
want := []eventDesc{
{trace.EvGCStart, []frame{
{"runtime.GC", 0},
- {"runtime/trace_test.TestTraceSymbolize", 106},
+ {"runtime/trace_test.TestTraceSymbolize", 107},
{"testing.tRunner", 0},
}},
{trace.EvGoStart, []frame{
{"runtime/trace_test.TestTraceSymbolize.func1", 37},
}},
{trace.EvGoSched, []frame{
- {"runtime/trace_test.TestTraceSymbolize", 107},
+ {"runtime/trace_test.TestTraceSymbolize", 108},
{"testing.tRunner", 0},
}},
{trace.EvGoCreate, []frame{
@@ -171,7 +172,7 @@
}},
{trace.EvGoUnblock, []frame{
{"runtime.chansend1", 0},
- {"runtime/trace_test.TestTraceSymbolize", 109},
+ {"runtime/trace_test.TestTraceSymbolize", 110},
{"testing.tRunner", 0},
}},
{trace.EvGoBlockSend, []frame{
@@ -180,7 +181,7 @@
}},
{trace.EvGoUnblock, []frame{
{"runtime.chanrecv1", 0},
- {"runtime/trace_test.TestTraceSymbolize", 110},
+ {"runtime/trace_test.TestTraceSymbolize", 111},
{"testing.tRunner", 0},
}},
{trace.EvGoBlockSelect, []frame{
@@ -189,7 +190,7 @@
}},
{trace.EvGoUnblock, []frame{
{"runtime.selectgo", 0},
- {"runtime/trace_test.TestTraceSymbolize", 111},
+ {"runtime/trace_test.TestTraceSymbolize", 112},
{"testing.tRunner", 0},
}},
{trace.EvGoBlockSync, []frame{
@@ -198,7 +199,7 @@
}},
{trace.EvGoUnblock, []frame{
{"sync.(*Mutex).Unlock", 0},
- {"runtime/trace_test.TestTraceSymbolize", 115},
+ {"runtime/trace_test.TestTraceSymbolize", 116},
{"testing.tRunner", 0},
}},
{trace.EvGoBlockSync, []frame{
@@ -208,7 +209,7 @@
{trace.EvGoUnblock, []frame{
{"sync.(*WaitGroup).Add", 0},
{"sync.(*WaitGroup).Done", 0},
- {"runtime/trace_test.TestTraceSymbolize", 116},
+ {"runtime/trace_test.TestTraceSymbolize", 117},
{"testing.tRunner", 0},
}},
{trace.EvGoBlockCond, []frame{
@@ -217,12 +218,12 @@
}},
{trace.EvGoUnblock, []frame{
{"sync.(*Cond).Signal", 0},
- {"runtime/trace_test.TestTraceSymbolize", 117},
+ {"runtime/trace_test.TestTraceSymbolize", 118},
{"testing.tRunner", 0},
}},
{trace.EvGoSleep, []frame{
{"time.Sleep", 0},
- {"runtime/trace_test.TestTraceSymbolize", 108},
+ {"runtime/trace_test.TestTraceSymbolize", 109},
{"testing.tRunner", 0},
}},
}
@@ -240,7 +241,7 @@
{"syscall.Read", 0},
{"os.(*File).read", 0},
{"os.(*File).Read", 0},
- {"runtime/trace_test.TestTraceSymbolize.func11", 101},
+ {"runtime/trace_test.TestTraceSymbolize.func11", 102},
}},
}...)
}
diff --git a/src/runtime/trace/trace_test.go b/src/runtime/trace/trace_test.go
index 191bdd93..c5f64fc 100644
--- a/src/runtime/trace/trace_test.go
+++ b/src/runtime/trace/trace_test.go
@@ -269,7 +269,8 @@
rp, wp, err := os.Pipe()
if err != nil {
- t.Fatalf("failed to create pipe: %v", err)
+ t.Errorf("failed to create pipe: %v", err)
+ return
}
defer func() {
rp.Close()
@@ -345,7 +346,8 @@
// A bit of network.
ln, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
- t.Fatalf("listen failed: %v", err)
+ t.Errorf("listen failed: %v", err)
+ return
}
defer ln.Close()
go func() {
@@ -360,7 +362,8 @@
}()
c, err := net.Dial("tcp", ln.Addr().String())
if err != nil {
- t.Fatalf("dial failed: %v", err)
+ t.Errorf("dial failed: %v", err)
+ return
}
var tmp [1]byte
c.Read(tmp[:])
diff --git a/src/sync/atomic/atomic_test.go b/src/sync/atomic/atomic_test.go
index a230d63..c151f46 100644
--- a/src/sync/atomic/atomic_test.go
+++ b/src/sync/atomic/atomic_test.go
@@ -1226,10 +1226,12 @@
}
his := LoadInt32(&ack[he][i%3])
if (my != i && my != i-1) || (his != i && his != i-1) {
- t.Fatalf("invalid values: %d/%d (%d)", my, his, i)
+ t.Errorf("invalid values: %d/%d (%d)", my, his, i)
+ break
}
if my != i && his != i {
- t.Fatalf("store/load are not sequentially consistent: %d/%d (%d)", my, his, i)
+ t.Errorf("store/load are not sequentially consistent: %d/%d (%d)", my, his, i)
+ break
}
StoreInt32(&ack[me][(i-1)%3], -1)
}
@@ -1269,10 +1271,12 @@
}
his := LoadInt64(&ack[he][i%3])
if (my != i && my != i-1) || (his != i && his != i-1) {
- t.Fatalf("invalid values: %d/%d (%d)", my, his, i)
+ t.Errorf("invalid values: %d/%d (%d)", my, his, i)
+ break
}
if my != i && his != i {
- t.Fatalf("store/load are not sequentially consistent: %d/%d (%d)", my, his, i)
+ t.Errorf("store/load are not sequentially consistent: %d/%d (%d)", my, his, i)
+ break
}
StoreInt64(&ack[me][(i-1)%3], -1)
}
@@ -1317,7 +1321,8 @@
d1 := X.data1
d2 := X.data2
if d1 != i || d2 != float32(i) {
- t.Fatalf("incorrect data: %d/%g (%d)", d1, d2, i)
+ t.Errorf("incorrect data: %d/%g (%d)", d1, d2, i)
+ break
}
}
}
@@ -1365,7 +1370,8 @@
d1 := X.data1
d2 := X.data2
if d1 != i || d2 != float64(i) {
- t.Fatalf("incorrect data: %d/%g (%d)", d1, d2, i)
+ t.Errorf("incorrect data: %d/%g (%d)", d1, d2, i)
+ break
}
}
}
diff --git a/src/sync/cond_test.go b/src/sync/cond_test.go
index 7b07295..9019f8f 100644
--- a/src/sync/cond_test.go
+++ b/src/sync/cond_test.go
@@ -137,7 +137,7 @@
x = 1
c.Wait()
if x != 2 {
- t.Fatal("want 2")
+ t.Error("want 2")
}
x = 3
c.Signal()
@@ -165,7 +165,7 @@
if x == 2 {
c.Wait()
if x != 3 {
- t.Fatal("want 3")
+ t.Error("want 3")
}
break
}
diff --git a/src/sync/pool_test.go b/src/sync/pool_test.go
index fa1a27b..5a38cbf 100644
--- a/src/sync/pool_test.go
+++ b/src/sync/pool_test.go
@@ -127,7 +127,8 @@
p.Put(v)
v = p.Get()
if v != nil && v.(int) != 0 {
- t.Fatalf("expect 0, got %v", v)
+ t.Errorf("expect 0, got %v", v)
+ break
}
}
done <- true