diff --git a/implementations/encrypted/EncryptedBlock.h b/implementations/encrypted/EncryptedBlock.h index 5d1a8ee7..80731cad 100644 --- a/implementations/encrypted/EncryptedBlock.h +++ b/implementations/encrypted/EncryptedBlock.h @@ -12,6 +12,7 @@ #include #include "ciphers/Cipher.h" #include +#include namespace blockstore { namespace encrypted { @@ -50,6 +51,8 @@ private: static cpputils::Data _prependKeyHeaderToData(const Key &key, cpputils::Data data); static bool _keyHeaderIsCorrect(const Key &key, const cpputils::Data &data); + std::mutex _mutex; + DISALLOW_COPY_AND_ASSIGN(EncryptedBlock); }; @@ -114,6 +117,7 @@ EncryptedBlock::EncryptedBlock(cpputils::unique_ref baseBlock, co template EncryptedBlock::~EncryptedBlock() { + std::unique_lock lock(_mutex); _encryptToBaseBlock(); } @@ -131,6 +135,7 @@ void EncryptedBlock::write(const void *source, uint64_t offset, uint64_t template void EncryptedBlock::flush() { + std::unique_lock lock(_mutex); _encryptToBaseBlock(); return _baseBlock->flush(); } @@ -151,6 +156,7 @@ void EncryptedBlock::_encryptToBaseBlock() { template cpputils::unique_ref EncryptedBlock::releaseBlock() { + std::unique_lock lock(_mutex); _encryptToBaseBlock(); return std::move(_baseBlock); } diff --git a/implementations/ondisk/OnDiskBlock.cpp b/implementations/ondisk/OnDiskBlock.cpp index 07ad3f77..ca357a28 100644 --- a/implementations/ondisk/OnDiskBlock.cpp +++ b/implementations/ondisk/OnDiskBlock.cpp @@ -91,6 +91,7 @@ void OnDiskBlock::_storeToDisk() const { } void OnDiskBlock::flush() { + std::unique_lock lock(_mutex); if (_dataChanged) { _storeToDisk(); _dataChanged = false; diff --git a/implementations/ondisk/OnDiskBlock.h b/implementations/ondisk/OnDiskBlock.h index 3eddb692..3a0f4ad8 100644 --- a/implementations/ondisk/OnDiskBlock.h +++ b/implementations/ondisk/OnDiskBlock.h @@ -8,6 +8,7 @@ #include #include +#include namespace blockstore { namespace ondisk { @@ -37,6 +38,8 @@ private: void _fillDataWithZeroes(); void _storeToDisk() const; + std::mutex _mutex; + DISALLOW_COPY_AND_ASSIGN(OnDiskBlock); };