From 40b4ef93b505319c7a67ec1d6d8f54c63f55ed8a Mon Sep 17 00:00:00 2001 From: SAY-5 Date: Sat, 2 May 2026 22:19:29 -0700 Subject: [PATCH] reftracker: return snapshot from AppsForRef/RefsForApp to fix concurrent-map panic (#1812) Signed-off-by: SAY-5 --- pkg/reftracker/ref_tracker.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/pkg/reftracker/ref_tracker.go b/pkg/reftracker/ref_tracker.go index 26a2c0101..0861ff487 100644 --- a/pkg/reftracker/ref_tracker.go +++ b/pkg/reftracker/ref_tracker.go @@ -28,18 +28,27 @@ func (a *AppRefTracker) AppsForRef(refKey RefKey) (map[RefKey]struct{}, error) { return nil, fmt.Errorf("could not find ref %s", refKey.Description()) } - return apps, nil + return cloneRefKeySet(apps), nil } func (a *AppRefTracker) RefsForApp(appKey RefKey) (map[RefKey]struct{}, error) { a.lock.Lock() defer a.lock.Unlock() - if a.appsToRefs[appKey] == nil { + refs := a.appsToRefs[appKey] + if refs == nil { return nil, fmt.Errorf("could not find refs for App %s", appKey.RefName()) } - return a.appsToRefs[appKey], nil + return cloneRefKeySet(refs), nil +} + +func cloneRefKeySet(in map[RefKey]struct{}) map[RefKey]struct{} { + out := make(map[RefKey]struct{}, len(in)) + for k := range in { + out[k] = struct{}{} + } + return out } func (a *AppRefTracker) RemoveRef(refKey RefKey) {