Skip to content

Commit a145890

Browse files
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 <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Brad Fitzpatrick <[email protected]>
1 parent 9be14c4 commit a145890

14 files changed

+68
-40
lines changed

src/crypto/tls/handshake_server_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,8 @@ func TestRenegotiationExtension(t *testing.T) {
206206
buf = make([]byte, 1024)
207207
n, err := c.Read(buf)
208208
if err != nil {
209-
t.Fatalf("Server read returned error: %s", err)
209+
t.Errorf("Server read returned error: %s", err)
210+
return
210211
}
211212
buf = buf[:n]
212213
c.Close()

src/crypto/tls/tls_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -295,12 +295,14 @@ func TestTLSUniqueMatches(t *testing.T) {
295295
for i := 0; i < 2; i++ {
296296
sconn, err := ln.Accept()
297297
if err != nil {
298-
t.Fatal(err)
298+
t.Error(err)
299+
return
299300
}
300301
serverConfig := testConfig.Clone()
301302
srv := Server(sconn, serverConfig)
302303
if err := srv.Handshake(); err != nil {
303-
t.Fatal(err)
304+
t.Error(err)
305+
return
304306
}
305307
serverTLSUniques <- srv.ConnectionState().TLSUnique
306308
}

src/database/sql/sql_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -2514,7 +2514,8 @@ func TestConnectionLeak(t *testing.T) {
25142514
go func() {
25152515
r, err := db.Query("SELECT|people|name|")
25162516
if err != nil {
2517-
t.Fatal(err)
2517+
t.Error(err)
2518+
return
25182519
}
25192520
r.Close()
25202521
wg.Done()

src/log/syslog/syslog_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,8 @@ func TestConcurrentReconnect(t *testing.T) {
369369
defer wg.Done()
370370
w, err := Dial(net, addr, LOG_USER|LOG_ERR, "tag")
371371
if err != nil {
372-
t.Fatalf("syslog.Dial() failed: %v", err)
372+
t.Errorf("syslog.Dial() failed: %v", err)
373+
return
373374
}
374375
defer w.Close()
375376
for i := 0; i < M; i++ {

src/net/dnsclient_unix_test.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -668,12 +668,14 @@ func TestIgnoreDNSForgeries(t *testing.T) {
668668
b := make([]byte, 512)
669669
n, err := s.Read(b)
670670
if err != nil {
671-
t.Fatal(err)
671+
t.Error(err)
672+
return
672673
}
673674

674675
msg := &dnsMsg{}
675676
if !msg.Unpack(b[:n]) {
676-
t.Fatal("invalid DNS query")
677+
t.Error("invalid DNS query")
678+
return
677679
}
678680

679681
s.Write([]byte("garbage DNS response packet"))
@@ -682,7 +684,8 @@ func TestIgnoreDNSForgeries(t *testing.T) {
682684
msg.id++ // make invalid ID
683685
b, ok := msg.Pack()
684686
if !ok {
685-
t.Fatal("failed to pack DNS response")
687+
t.Error("failed to pack DNS response")
688+
return
686689
}
687690
s.Write(b)
688691

@@ -701,7 +704,8 @@ func TestIgnoreDNSForgeries(t *testing.T) {
701704

702705
b, ok = msg.Pack()
703706
if !ok {
704-
t.Fatal("failed to pack DNS response")
707+
t.Error("failed to pack DNS response")
708+
return
705709
}
706710
s.Write(b)
707711
}()

src/net/http/serve_test.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -2468,7 +2468,7 @@ func TestClientWriteShutdown(t *testing.T) {
24682468
defer close(donec)
24692469
bs, err := ioutil.ReadAll(conn)
24702470
if err != nil {
2471-
t.Fatalf("ReadAll: %v", err)
2471+
t.Errorf("ReadAll: %v", err)
24722472
}
24732473
got := string(bs)
24742474
if got != "" {
@@ -2620,7 +2620,8 @@ func TestCloseNotifier(t *testing.T) {
26202620
go func() {
26212621
_, err = fmt.Fprintf(conn, "GET / HTTP/1.1\r\nConnection: keep-alive\r\nHost: foo\r\n\r\n")
26222622
if err != nil {
2623-
t.Fatal(err)
2623+
t.Error(err)
2624+
return
26242625
}
26252626
<-diec
26262627
conn.Close()
@@ -2662,7 +2663,8 @@ func TestCloseNotifierPipelined(t *testing.T) {
26622663
const req = "GET / HTTP/1.1\r\nConnection: keep-alive\r\nHost: foo\r\n\r\n"
26632664
_, err = io.WriteString(conn, req+req) // two requests
26642665
if err != nil {
2665-
t.Fatal(err)
2666+
t.Error(err)
2667+
return
26662668
}
26672669
<-diec
26682670
conn.Close()

src/net/rpc/server_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,8 @@ func benchmarkEndToEndAsync(dial func() (*Client, error), b *testing.B) {
693693
B := call.Args.(*Args).B
694694
C := call.Reply.(*Reply).C
695695
if A+B != C {
696-
b.Fatalf("incorrect reply: Add: expected %d got %d", A+B, C)
696+
b.Errorf("incorrect reply: Add: expected %d got %d", A+B, C)
697+
return
697698
}
698699
<-gate
699700
if atomic.AddInt32(&recv, -1) == 0 {

src/os/exec/exec_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ func TestExtraFilesFDShuffle(t *testing.T) {
432432
buf := make([]byte, 512)
433433
n, err := stderr.Read(buf)
434434
if err != nil {
435-
t.Fatalf("Read: %s", err)
435+
t.Errorf("Read: %s", err)
436436
ch <- err.Error()
437437
} else {
438438
ch <- string(buf[:n])

src/runtime/chan_test.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -210,11 +210,14 @@ func TestNonblockRecvRace(t *testing.T) {
210210
select {
211211
case <-c:
212212
default:
213-
t.Fatal("chan is not ready")
213+
t.Error("chan is not ready")
214214
}
215215
}()
216216
close(c)
217217
<-c
218+
if t.Failed() {
219+
return
220+
}
218221
}
219222
}
220223

@@ -311,14 +314,16 @@ func TestSelfSelect(t *testing.T) {
311314
case c <- p:
312315
case v := <-c:
313316
if chanCap == 0 && v == p {
314-
t.Fatalf("self receive")
317+
t.Errorf("self receive")
318+
return
315319
}
316320
}
317321
} else {
318322
select {
319323
case v := <-c:
320324
if chanCap == 0 && v == p {
321-
t.Fatalf("self receive")
325+
t.Errorf("self receive")
326+
return
322327
}
323328
case c <- p:
324329
}

src/runtime/trace/trace_stack_test.go

+12-11
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ func TestTraceSymbolize(t *testing.T) {
8585
go func() {
8686
c, err := ln.Accept()
8787
if err != nil {
88-
t.Fatalf("failed to accept: %v", err)
88+
t.Errorf("failed to accept: %v", err)
89+
return
8990
}
9091
c.Close()
9192
}()
@@ -139,14 +140,14 @@ func TestTraceSymbolize(t *testing.T) {
139140
want := []eventDesc{
140141
{trace.EvGCStart, []frame{
141142
{"runtime.GC", 0},
142-
{"runtime/trace_test.TestTraceSymbolize", 106},
143+
{"runtime/trace_test.TestTraceSymbolize", 107},
143144
{"testing.tRunner", 0},
144145
}},
145146
{trace.EvGoStart, []frame{
146147
{"runtime/trace_test.TestTraceSymbolize.func1", 37},
147148
}},
148149
{trace.EvGoSched, []frame{
149-
{"runtime/trace_test.TestTraceSymbolize", 107},
150+
{"runtime/trace_test.TestTraceSymbolize", 108},
150151
{"testing.tRunner", 0},
151152
}},
152153
{trace.EvGoCreate, []frame{
@@ -171,7 +172,7 @@ func TestTraceSymbolize(t *testing.T) {
171172
}},
172173
{trace.EvGoUnblock, []frame{
173174
{"runtime.chansend1", 0},
174-
{"runtime/trace_test.TestTraceSymbolize", 109},
175+
{"runtime/trace_test.TestTraceSymbolize", 110},
175176
{"testing.tRunner", 0},
176177
}},
177178
{trace.EvGoBlockSend, []frame{
@@ -180,7 +181,7 @@ func TestTraceSymbolize(t *testing.T) {
180181
}},
181182
{trace.EvGoUnblock, []frame{
182183
{"runtime.chanrecv1", 0},
183-
{"runtime/trace_test.TestTraceSymbolize", 110},
184+
{"runtime/trace_test.TestTraceSymbolize", 111},
184185
{"testing.tRunner", 0},
185186
}},
186187
{trace.EvGoBlockSelect, []frame{
@@ -189,7 +190,7 @@ func TestTraceSymbolize(t *testing.T) {
189190
}},
190191
{trace.EvGoUnblock, []frame{
191192
{"runtime.selectgo", 0},
192-
{"runtime/trace_test.TestTraceSymbolize", 111},
193+
{"runtime/trace_test.TestTraceSymbolize", 112},
193194
{"testing.tRunner", 0},
194195
}},
195196
{trace.EvGoBlockSync, []frame{
@@ -198,7 +199,7 @@ func TestTraceSymbolize(t *testing.T) {
198199
}},
199200
{trace.EvGoUnblock, []frame{
200201
{"sync.(*Mutex).Unlock", 0},
201-
{"runtime/trace_test.TestTraceSymbolize", 115},
202+
{"runtime/trace_test.TestTraceSymbolize", 116},
202203
{"testing.tRunner", 0},
203204
}},
204205
{trace.EvGoBlockSync, []frame{
@@ -208,7 +209,7 @@ func TestTraceSymbolize(t *testing.T) {
208209
{trace.EvGoUnblock, []frame{
209210
{"sync.(*WaitGroup).Add", 0},
210211
{"sync.(*WaitGroup).Done", 0},
211-
{"runtime/trace_test.TestTraceSymbolize", 116},
212+
{"runtime/trace_test.TestTraceSymbolize", 117},
212213
{"testing.tRunner", 0},
213214
}},
214215
{trace.EvGoBlockCond, []frame{
@@ -217,12 +218,12 @@ func TestTraceSymbolize(t *testing.T) {
217218
}},
218219
{trace.EvGoUnblock, []frame{
219220
{"sync.(*Cond).Signal", 0},
220-
{"runtime/trace_test.TestTraceSymbolize", 117},
221+
{"runtime/trace_test.TestTraceSymbolize", 118},
221222
{"testing.tRunner", 0},
222223
}},
223224
{trace.EvGoSleep, []frame{
224225
{"time.Sleep", 0},
225-
{"runtime/trace_test.TestTraceSymbolize", 108},
226+
{"runtime/trace_test.TestTraceSymbolize", 109},
226227
{"testing.tRunner", 0},
227228
}},
228229
}
@@ -240,7 +241,7 @@ func TestTraceSymbolize(t *testing.T) {
240241
{"syscall.Read", 0},
241242
{"os.(*File).read", 0},
242243
{"os.(*File).Read", 0},
243-
{"runtime/trace_test.TestTraceSymbolize.func11", 101},
244+
{"runtime/trace_test.TestTraceSymbolize.func11", 102},
244245
}},
245246
}...)
246247
}

src/runtime/trace/trace_test.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,8 @@ func TestTraceStressStartStop(t *testing.T) {
269269

270270
rp, wp, err := os.Pipe()
271271
if err != nil {
272-
t.Fatalf("failed to create pipe: %v", err)
272+
t.Errorf("failed to create pipe: %v", err)
273+
return
273274
}
274275
defer func() {
275276
rp.Close()
@@ -345,7 +346,8 @@ func TestTraceStressStartStop(t *testing.T) {
345346
// A bit of network.
346347
ln, err := net.Listen("tcp", "127.0.0.1:0")
347348
if err != nil {
348-
t.Fatalf("listen failed: %v", err)
349+
t.Errorf("listen failed: %v", err)
350+
return
349351
}
350352
defer ln.Close()
351353
go func() {
@@ -360,7 +362,8 @@ func TestTraceStressStartStop(t *testing.T) {
360362
}()
361363
c, err := net.Dial("tcp", ln.Addr().String())
362364
if err != nil {
363-
t.Fatalf("dial failed: %v", err)
365+
t.Errorf("dial failed: %v", err)
366+
return
364367
}
365368
var tmp [1]byte
366369
c.Read(tmp[:])

src/sync/atomic/atomic_test.go

+12-6
Original file line numberDiff line numberDiff line change
@@ -1226,10 +1226,12 @@ func TestStoreLoadSeqCst32(t *testing.T) {
12261226
}
12271227
his := LoadInt32(&ack[he][i%3])
12281228
if (my != i && my != i-1) || (his != i && his != i-1) {
1229-
t.Fatalf("invalid values: %d/%d (%d)", my, his, i)
1229+
t.Errorf("invalid values: %d/%d (%d)", my, his, i)
1230+
break
12301231
}
12311232
if my != i && his != i {
1232-
t.Fatalf("store/load are not sequentially consistent: %d/%d (%d)", my, his, i)
1233+
t.Errorf("store/load are not sequentially consistent: %d/%d (%d)", my, his, i)
1234+
break
12331235
}
12341236
StoreInt32(&ack[me][(i-1)%3], -1)
12351237
}
@@ -1269,10 +1271,12 @@ func TestStoreLoadSeqCst64(t *testing.T) {
12691271
}
12701272
his := LoadInt64(&ack[he][i%3])
12711273
if (my != i && my != i-1) || (his != i && his != i-1) {
1272-
t.Fatalf("invalid values: %d/%d (%d)", my, his, i)
1274+
t.Errorf("invalid values: %d/%d (%d)", my, his, i)
1275+
break
12731276
}
12741277
if my != i && his != i {
1275-
t.Fatalf("store/load are not sequentially consistent: %d/%d (%d)", my, his, i)
1278+
t.Errorf("store/load are not sequentially consistent: %d/%d (%d)", my, his, i)
1279+
break
12761280
}
12771281
StoreInt64(&ack[me][(i-1)%3], -1)
12781282
}
@@ -1317,7 +1321,8 @@ func TestStoreLoadRelAcq32(t *testing.T) {
13171321
d1 := X.data1
13181322
d2 := X.data2
13191323
if d1 != i || d2 != float32(i) {
1320-
t.Fatalf("incorrect data: %d/%g (%d)", d1, d2, i)
1324+
t.Errorf("incorrect data: %d/%g (%d)", d1, d2, i)
1325+
break
13211326
}
13221327
}
13231328
}
@@ -1365,7 +1370,8 @@ func TestStoreLoadRelAcq64(t *testing.T) {
13651370
d1 := X.data1
13661371
d2 := X.data2
13671372
if d1 != i || d2 != float64(i) {
1368-
t.Fatalf("incorrect data: %d/%g (%d)", d1, d2, i)
1373+
t.Errorf("incorrect data: %d/%g (%d)", d1, d2, i)
1374+
break
13691375
}
13701376
}
13711377
}

src/sync/cond_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ func TestRace(t *testing.T) {
137137
x = 1
138138
c.Wait()
139139
if x != 2 {
140-
t.Fatal("want 2")
140+
t.Error("want 2")
141141
}
142142
x = 3
143143
c.Signal()
@@ -165,7 +165,7 @@ func TestRace(t *testing.T) {
165165
if x == 2 {
166166
c.Wait()
167167
if x != 3 {
168-
t.Fatal("want 3")
168+
t.Error("want 3")
169169
}
170170
break
171171
}

src/sync/pool_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ func TestPoolStress(t *testing.T) {
127127
p.Put(v)
128128
v = p.Get()
129129
if v != nil && v.(int) != 0 {
130-
t.Fatalf("expect 0, got %v", v)
130+
t.Errorf("expect 0, got %v", v)
131+
break
131132
}
132133
}
133134
done <- true

0 commit comments

Comments
 (0)