aboutsummaryrefslogtreecommitdiff
path: root/zencore/iobuffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'zencore/iobuffer.cpp')
-rw-r--r--zencore/iobuffer.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/zencore/iobuffer.cpp b/zencore/iobuffer.cpp
index 37ef57c2d..177b7dfb6 100644
--- a/zencore/iobuffer.cpp
+++ b/zencore/iobuffer.cpp
@@ -267,9 +267,18 @@ IoBufferExtendedCore::Materialize() const
if (m_Flags.load(std::memory_order_relaxed) & kIsMaterialized)
return;
- void* NewMmapHandle;
uint32_t NewFlags = kIsMaterialized;
+ if (m_DataBytes == 0)
+ {
+ m_Flags.fetch_or(NewFlags, std::memory_order_release);
+ // Fake a "valid" pointer, nobody should read this as size is zero
+ m_DataPtr = reinterpret_cast<uint8_t*>(&m_MmapHandle);
+ return;
+ }
+
+ void* NewMmapHandle;
+
const uint64_t MapOffset = m_FileOffset & ~0xffffull;
const uint64_t MappedOffsetDisplacement = m_FileOffset - MapOffset;
const uint64_t MapSize = m_DataBytes + MappedOffsetDisplacement;