Parcourir la source

cmol/pprof health (#17303)

health: ensure timers are cleaned up

Updates tailscale/corp#32696

Signed-off-by: Claus Lensbøl <[email protected]>
Claus Lensbøl il y a 5 mois
Parent
commit
9ae8155bab
1 fichiers modifiés avec 18 ajouts et 3 suppressions
  1. 18 3
      health/health.go

+ 18 - 3
health/health.go

@@ -143,15 +143,30 @@ func NewTracker(bus *eventbus.Bus) *Tracker {
 		panic("no eventbus set")
 	}
 
-	cli := bus.Client("health.Tracker")
+	ec := bus.Client("health.Tracker")
 	t := &Tracker{
-		eventClient: cli,
-		changePub:   eventbus.Publish[Change](cli),
+		eventClient: ec,
+		changePub:   eventbus.Publish[Change](ec),
 	}
 	t.timer = t.clock().AfterFunc(time.Minute, t.timerSelfCheck)
+
+	ec.Monitor(t.awaitEventClientDone)
+
 	return t
 }
 
+func (t *Tracker) awaitEventClientDone(ec *eventbus.Client) {
+	<-ec.Done()
+	t.mu.Lock()
+	defer t.mu.Unlock()
+
+	for _, timer := range t.pendingVisibleTimers {
+		timer.Stop()
+	}
+	t.timer.Stop()
+	clear(t.pendingVisibleTimers)
+}
+
 func (t *Tracker) now() time.Time {
 	if t.testClock != nil {
 		return t.testClock.Now()