ktesting: fix potential log panic

If the goroutine happens to log after the test has already terminated,
testing.T.Log panics. We must ensure that the goroutine has stopped before
allowing the test to terminate.
This commit is contained in:
Patrick Ohly 2026-02-26 08:44:18 +01:00
parent dbe44e3584
commit 8a2d153817

View file

@ -48,11 +48,17 @@ func withTimeout(ctx context.Context, tb TB, timeout time.Duration, timeoutCause
cancelCtx, cancel := context.WithCancelCause(ctx)
after := time.NewTimer(timeout)
stopCtx, stop := context.WithCancel(ctx) // Only used internally, doesn't need a cause.
done := make(chan struct{})
tb.Cleanup(func() {
cancel(cleanupErr(tb.Name()))
stop()
// Wait for goroutine termination. This is important because
// otherwise the goroutine might log through tb *after* the
// test has already finished, which causes a panic.
<-done
})
go func() {
defer close(done)
select {
case <-stopCtx.Done():
after.Stop()