aboutsummaryrefslogtreecommitdiff
path: root/zenstore/compactcas.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2022-03-11 16:04:22 +0100
committerDan Engelbrecht <[email protected]>2022-03-31 11:28:31 +0200
commit1e32efa945bb8f0f9aeca2ce2c9f0876f64c1db9 (patch)
tree009d2c1e0bfd4357ff11691fac823852637de4cb /zenstore/compactcas.cpp
parentWIP (diff)
downloadzen-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.cpp6
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);