From 59761f631b29de8dccbffe2626b74fccddbb8b48 Mon Sep 17 00:00:00 2001 From: Lukasz Mierzwa Date: Thu, 15 May 2025 12:30:48 +0100 Subject: [PATCH] Move m.targetsMtx.Lock down into the loop Make sure the order of locks is always the same in all functions. In ApplyConfig() we have m.targetsMtx.Lock() after provider is locked, so replicate the same in allGroups(). Signed-off-by: Lukasz Mierzwa --- discovery/manager.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/discovery/manager.go b/discovery/manager.go index d76e67adcc..6e9bab1d7c 100644 --- a/discovery/manager.go +++ b/discovery/manager.go @@ -413,9 +413,9 @@ func (m *Manager) allGroups() map[string][]*targetgroup.Group { n := map[string]int{} m.mtx.RLock() - m.targetsMtx.Lock() for _, p := range m.providers { p.mu.RLock() + m.targetsMtx.Lock() for s := range p.subs { // Send empty lists for subs without any targets to make sure old stale targets are dropped by consumers. // See: https://github.com/prometheus/prometheus/issues/12858 for details. @@ -430,9 +430,9 @@ func (m *Manager) allGroups() map[string][]*targetgroup.Group { } } } + m.targetsMtx.Unlock() p.mu.RUnlock() } - m.targetsMtx.Unlock() m.mtx.RUnlock() for setName, v := range n {