util/eventbus: log goroutine stacks when hung in CI

Updates #17680

Change-Id: Ie48dc2d64b7583d68578a28af52f6926f903ca4f
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2025-11-10 15:44:55 -08:00
committed by Brad Fitzpatrick
parent 42ce5c88be
commit 1eba5b0cbd
9 changed files with 15 additions and 8 deletions
+7
View File
@@ -7,10 +7,12 @@ import (
"context"
"fmt"
"reflect"
"runtime"
"sync"
"time"
"tailscale.com/types/logger"
"tailscale.com/util/cibuild"
)
type DeliveredEvent struct {
@@ -329,6 +331,11 @@ func (s *SubscriberFunc[T]) dispatch(ctx context.Context, vals *queue[DeliveredE
select {
case <-s.slow.C:
s.logf("giving up on subscriber for %T after %v at close", t, time.Since(start))
if cibuild.On() {
all := make([]byte, 2<<20)
n := runtime.Stack(all, true)
s.logf("goroutine stacks:\n%s", all[:n])
}
case <-callDone:
}
return false