From 7240649e4f636858ef970c5b2c009bc88562bf86 Mon Sep 17 00:00:00 2001 From: Ondra Kupka Date: Mon, 27 Oct 2025 14:37:48 +0100 Subject: [PATCH] controller/ttl: Improve goroutine mgmt Make sure all threads are terminated when Run returns. --- pkg/controller/ttl/ttl_controller.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/pkg/controller/ttl/ttl_controller.go b/pkg/controller/ttl/ttl_controller.go index 5991e541a14..31a2d1cfdf8 100644 --- a/pkg/controller/ttl/ttl_controller.go +++ b/pkg/controller/ttl/ttl_controller.go @@ -122,19 +122,26 @@ var ( // Run begins watching and syncing. func (ttlc *Controller) Run(ctx context.Context, workers int) { defer utilruntime.HandleCrash() - defer ttlc.queue.ShutDown() + logger := klog.FromContext(ctx) logger.Info("Starting TTL controller") - defer logger.Info("Shutting down TTL controller") + + var wg sync.WaitGroup + defer func() { + logger.Info("Shutting down TTL controller") + ttlc.queue.ShutDown() + wg.Wait() + }() if !cache.WaitForNamedCacheSyncWithContext(ctx, ttlc.hasSynced) { return } for i := 0; i < workers; i++ { - go wait.UntilWithContext(ctx, ttlc.worker, time.Second) + wg.Go(func() { + wait.UntilWithContext(ctx, ttlc.worker, time.Second) + }) } - <-ctx.Done() }