From 77b60f4462eb70ff002d9e31932a08950875311a Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Mon, 29 Sep 2025 16:38:15 +0100 Subject: [PATCH] Lock round access to containerData.infoLastUpdatedTime Since `updateSpec` and `updateSubcontainers` expect the lock not to be held, we need to unlock before calling them then re-lock when `GetInfo` does its own update. Signed-off-by: Bryan Boreham --- manager/container.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/manager/container.go b/manager/container.go index 9160aebae0..e3949d557a 100644 --- a/manager/container.go +++ b/manager/container.go @@ -171,8 +171,10 @@ func (cd *containerData) notifyOnDemand() { } func (cd *containerData) GetInfo(shouldUpdateSubcontainers bool) (*containerInfo, error) { + cd.lock.Lock() // Get spec and subcontainers. if cd.clock.Since(cd.infoLastUpdatedTime) > 5*time.Second || shouldUpdateSubcontainers { + cd.lock.Unlock() // Update functions expect the struct to be unlocked. err := cd.updateSpec() if err != nil { return nil, err @@ -183,9 +185,9 @@ func (cd *containerData) GetInfo(shouldUpdateSubcontainers bool) (*containerInfo return nil, err } } + cd.lock.Lock() cd.infoLastUpdatedTime = cd.clock.Now() } - cd.lock.Lock() defer cd.lock.Unlock() cInfo := containerInfo{ Subcontainers: cd.info.Subcontainers,