diff options
| author | Dan Engelbrecht <[email protected]> | 2023-10-27 12:09:53 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-10-27 12:09:53 +0200 |
| commit | a1a30be7ea68ccd94cb02f2fba0a3435b616a455 (patch) | |
| tree | c39c1ff07bbb2306fd3ffe6c481b94d816347ff1 /src/zenserver/cache/cachedisklayer.cpp | |
| parent | block sending error reports from sentry_sink to Sentry unless the log is actu... (diff) | |
| download | zen-a1a30be7ea68ccd94cb02f2fba0a3435b616a455.tar.xz zen-a1a30be7ea68ccd94cb02f2fba0a3435b616a455.zip | |
fix CacheBucket::CollectGarbage removing standalone entries without an exclusive lock (#502)
Diffstat (limited to 'src/zenserver/cache/cachedisklayer.cpp')
| -rw-r--r-- | src/zenserver/cache/cachedisklayer.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/zenserver/cache/cachedisklayer.cpp b/src/zenserver/cache/cachedisklayer.cpp index f755436e0..2efec1e66 100644 --- a/src/zenserver/cache/cachedisklayer.cpp +++ b/src/zenserver/cache/cachedisklayer.cpp @@ -1687,11 +1687,15 @@ ZenCacheDiskLayer::CacheBucket::CollectGarbage(GcContext& GcCtx, std::atomic_uin } if (GcCtx.IsDeletionMode()) { + IndexLock.ReleaseNow(); + RwLock::ExclusiveLockScope __(m_IndexLock); for (const auto& Entry : ExpiredStandaloneEntries) { - m_Index.erase(Entry.Key); - m_StandaloneSize.fetch_sub(Entry.Location.Size(), std::memory_order::relaxed); - DeletedChunks.insert(Entry.Key); + if (m_Index.erase(Entry.Key) == 1) + { + m_StandaloneSize.fetch_sub(Entry.Location.Size(), std::memory_order::relaxed); + DeletedChunks.insert(Entry.Key); + } } m_SlogFile.Append(ExpiredStandaloneEntries); } @@ -2875,7 +2879,6 @@ ZenCacheDiskLayer::MemCacheTrim() std::vector<CacheBucket*> Buckets; { RwLock::SharedLockScope __(m_Lock); - RwLock::SharedLockScope _(m_Lock); Buckets.reserve(m_Buckets.size()); for (auto& Kv : m_Buckets) { |