aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore/blockstore.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenstore/blockstore.cpp')
-rw-r--r--src/zenstore/blockstore.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/zenstore/blockstore.cpp b/src/zenstore/blockstore.cpp
index 0fee18420..337a5f8e0 100644
--- a/src/zenstore/blockstore.cpp
+++ b/src/zenstore/blockstore.cpp
@@ -163,7 +163,17 @@ BlockStoreFile::Write(const void* Data, uint64_t Size, uint64_t FileOffset)
ZEN_TRACE_CPU("BlockStoreFile::Write");
ZEN_ASSERT(Size + FileOffset <= m_IoBuffer.GetSize());
m_File.Write(Data, Size, FileOffset);
- m_CachedFileSize.store(0);
+
+ uint64_t NewSize = FileOffset + Size;
+ uint64_t CurrentSize = m_CachedFileSize.load();
+ while (NewSize > CurrentSize)
+ {
+ if (m_CachedFileSize.compare_exchange_strong(CurrentSize, NewSize))
+ {
+ break;
+ }
+ }
+ ZEN_ASSERT(m_CachedFileSize.load() >= NewSize);
}
void