aboutsummaryrefslogtreecommitdiff
path: root/zenstore/gc.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-10-21 18:03:41 +0200
committerStefan Boberg <[email protected]>2021-10-21 18:03:41 +0200
commit3e824897aed32282ec9ee297e1cfc3efc5a8d251 (patch)
tree199d71e7314ecf7df577b4466f0d599b86c4dd08 /zenstore/gc.cpp
parentAdded IsReady flag to ZenServerEntry (diff)
downloadzen-3e824897aed32282ec9ee297e1cfc3efc5a8d251.tar.xz
zen-3e824897aed32282ec9ee297e1cfc3efc5a8d251.zip
gc: Added GcStorage base class and hooked it up to CasGc
Diffstat (limited to 'zenstore/gc.cpp')
-rw-r--r--zenstore/gc.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/zenstore/gc.cpp b/zenstore/gc.cpp
index 612cceed9..79c646db2 100644
--- a/zenstore/gc.cpp
+++ b/zenstore/gc.cpp
@@ -47,7 +47,19 @@ GcContributor::~GcContributor()
//////////////////////////////////////////////////////////////////////////
-CasGc::CasGc(CasStore& Store) : m_CasStore(Store)
+GcStorage::GcStorage(CasGc& Gc) : m_Gc(Gc)
+{
+ m_Gc.AddGcStorage(this);
+}
+
+GcStorage::~GcStorage()
+{
+ m_Gc.AddGcStorage(this);
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+CasGc::CasGc()
{
}
@@ -70,6 +82,20 @@ CasGc::RemoveGcContributor(GcContributor* Contributor)
}
void
+CasGc::AddGcStorage(GcStorage* Storage)
+{
+ RwLock::ExclusiveLockScope _(m_Lock);
+ m_GcStorage.push_back(Storage);
+}
+
+void
+CasGc::RemoveGcStorage(GcStorage* Storage)
+{
+ RwLock::ExclusiveLockScope _(m_Lock);
+ std::erase_if(m_GcStorage, [&](GcStorage* $) { return $ == Storage; });
+}
+
+void
CasGc::CollectGarbage()
{
}