From c572d8d93ca530945b9ec763c0cf3cf36e776eff Mon Sep 17 00:00:00 2001 From: Allen Huang <47193534+alhuan@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:18:10 -0700 Subject: [PATCH] Automatically clean up refreshable ticker goroutines when object lifetime expires --- refreshable/refreshable_ticker.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/refreshable/refreshable_ticker.go b/refreshable/refreshable_ticker.go index 9a257de5..121d4963 100644 --- a/refreshable/refreshable_ticker.go +++ b/refreshable/refreshable_ticker.go @@ -6,6 +6,7 @@ package refreshable import ( "context" + "runtime" "time" ) @@ -44,6 +45,8 @@ func NewRefreshableTicker[M any](ctx context.Context, updateTicker <-chan time.T if _, err := v.Validation(); err == nil { detector.MarkUpdated() } + + ctx, cancel := context.WithCancel(ctx) go func() { for { select { @@ -60,5 +63,7 @@ func NewRefreshableTicker[M any](ctx context.Context, updateTicker <-chan time.T } } }() + + runtime.AddCleanup(v, func(_ struct{}) { cancel() }, struct{}{}) return v }