diff options
| author | Dan Engelbrecht <[email protected]> | 2022-03-11 16:04:22 +0100 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2022-03-31 11:28:31 +0200 |
| commit | 1e32efa945bb8f0f9aeca2ce2c9f0876f64c1db9 (patch) | |
| tree | 009d2c1e0bfd4357ff11691fac823852637de4cb /zenstore/compactcas.cpp | |
| parent | WIP (diff) | |
| download | zen-1e32efa945bb8f0f9aeca2ce2c9f0876f64c1db9.tar.xz zen-1e32efa945bb8f0f9aeca2ce2c9f0876f64c1db9.zip | |
Fix race condition that could cause loss of added items
Diffstat (limited to 'zenstore/compactcas.cpp')
| -rw-r--r-- | zenstore/compactcas.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/zenstore/compactcas.cpp b/zenstore/compactcas.cpp index a2142b497..a2806a7fe 100644 --- a/zenstore/compactcas.cpp +++ b/zenstore/compactcas.cpp @@ -59,8 +59,10 @@ CasContainerStrategy::Initialize(const std::string_view ContainerBaseName, uint6 CasStore::InsertResult CasContainerStrategy::InsertChunk(const void* ChunkData, size_t ChunkSize, const IoHash& ChunkHash) { + RwLock::ExclusiveLockScope _i(m_InsertLock); + { - RwLock::SharedLockScope _(m_LocationMapLock); + RwLock::SharedLockScope _l(m_LocationMapLock); auto KeyIt = m_LocationMap.find(ChunkHash); if (KeyIt != m_LocationMap.end()) @@ -71,8 +73,6 @@ CasContainerStrategy::InsertChunk(const void* ChunkData, size_t ChunkSize, const // New entry - RwLock::ExclusiveLockScope _(m_InsertLock); - const uint64_t InsertOffset = m_CurrentInsertOffset; m_SmallObjectFile.Write(ChunkData, ChunkSize, InsertOffset); |