diff options
| author | Dan Engelbrecht <[email protected]> | 2023-10-05 11:30:52 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-10-05 11:30:52 +0200 |
| commit | a6c0facba83398d74e1f6d1b04a3641731af73b0 (patch) | |
| tree | b7935f2c4d25083b8171424f1142d128ccc15185 /src/zenserver/cache/cachedisklayer.cpp | |
| parent | 0.2.26-pre2 (diff) | |
| download | zen-a6c0facba83398d74e1f6d1b04a3641731af73b0.tar.xz zen-a6c0facba83398d74e1f6d1b04a3641731af73b0.zip | |
reduce lock in disklayer (#447)
* Don't block all write access to all buckets when doing GatherReferences/CollectGarbage
Diffstat (limited to 'src/zenserver/cache/cachedisklayer.cpp')
| -rw-r--r-- | src/zenserver/cache/cachedisklayer.cpp | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/src/zenserver/cache/cachedisklayer.cpp b/src/zenserver/cache/cachedisklayer.cpp index 7ce713de9..fafc6bbee 100644 --- a/src/zenserver/cache/cachedisklayer.cpp +++ b/src/zenserver/cache/cachedisklayer.cpp @@ -1805,12 +1805,18 @@ ZenCacheDiskLayer::CollectGarbage(GcContext& GcCtx) { ZEN_TRACE_CPU("Z$::Disk::CollectGarbage"); - RwLock::SharedLockScope _(m_Lock); - - for (auto& Kv : m_Buckets) + std::vector<CacheBucket*> Buckets; + { + RwLock::SharedLockScope _(m_Lock); + Buckets.reserve(m_Buckets.size()); + for (auto& Kv : m_Buckets) + { + Buckets.push_back(Kv.second.get()); + } + } + for (CacheBucket* Bucket : Buckets) { - CacheBucket& Bucket = *Kv.second; - Bucket.CollectGarbage(GcCtx); + Bucket->CollectGarbage(GcCtx); } } @@ -2261,12 +2267,18 @@ ZenCacheDiskLayer::GatherReferences(GcContext& GcCtx) { ZEN_TRACE_CPU("Z$::Disk::GatherReferences"); - RwLock::SharedLockScope _(m_Lock); - - for (auto& Kv : m_Buckets) + std::vector<CacheBucket*> Buckets; + { + RwLock::SharedLockScope _(m_Lock); + Buckets.reserve(m_Buckets.size()); + for (auto& Kv : m_Buckets) + { + Buckets.push_back(Kv.second.get()); + } + } + for (CacheBucket* Bucket : Buckets) { - CacheBucket& Bucket = *Kv.second; - Bucket.GatherReferences(GcCtx); + Bucket->GatherReferences(GcCtx); } } |