Use Set in GetOrSet to enforce proper lock ordering

Signed-off-by: Kyle Eckhart <kgeckhart@users.noreply.github.com>
This commit is contained in:
Kyle Eckhart 2026-02-25 16:52:07 -05:00
parent 33afbb799a
commit 9c6b468ae3

View file

@ -260,20 +260,13 @@ func (s *stripeSeries) GetOrSet(hash uint64, series *memSeries) (*memSeries, boo
hashLock := s.hashLock(hash)
s.locks[hashLock].Lock()
// If it already exists in hashes, return it.
if prev := s.hashes[hashLock].Get(hash, series.lset); prev != nil {
s.locks[hashLock].Unlock()
return prev, false
}
s.hashes[hashLock].Set(hash, series)
s.locks[hashLock].Unlock()
refLock := s.refLock(series.ref)
s.locks[refLock].Lock()
s.series[refLock][series.ref] = series
s.locks[refLock].Unlock()
s.Set(hash, series)
return series, true
}