diff options
Diffstat (limited to 'zenstore/gc.cpp')
| -rw-r--r-- | zenstore/gc.cpp | 28 |
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() { } |