Added some locks against race conditions
This commit is contained in:
parent
78dbe6ea24
commit
810c2c5b48
@ -12,6 +12,7 @@
|
||||
#include <boost/optional.hpp>
|
||||
#include "ciphers/Cipher.h"
|
||||
#include <messmer/cpp-utils/assert/assert.h>
|
||||
#include <mutex>
|
||||
|
||||
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<Cipher>::EncryptedBlock(cpputils::unique_ref<Block> baseBlock, co
|
||||
|
||||
template<class Cipher>
|
||||
EncryptedBlock<Cipher>::~EncryptedBlock() {
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
_encryptToBaseBlock();
|
||||
}
|
||||
|
||||
@ -131,6 +135,7 @@ void EncryptedBlock<Cipher>::write(const void *source, uint64_t offset, uint64_t
|
||||
|
||||
template<class Cipher>
|
||||
void EncryptedBlock<Cipher>::flush() {
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
_encryptToBaseBlock();
|
||||
return _baseBlock->flush();
|
||||
}
|
||||
@ -151,6 +156,7 @@ void EncryptedBlock<Cipher>::_encryptToBaseBlock() {
|
||||
|
||||
template<class Cipher>
|
||||
cpputils::unique_ref<Block> EncryptedBlock<Cipher>::releaseBlock() {
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
_encryptToBaseBlock();
|
||||
return std::move(_baseBlock);
|
||||
}
|
||||
|
@ -91,6 +91,7 @@ void OnDiskBlock::_storeToDisk() const {
|
||||
}
|
||||
|
||||
void OnDiskBlock::flush() {
|
||||
std::unique_lock<std::mutex> lock(_mutex);
|
||||
if (_dataChanged) {
|
||||
_storeToDisk();
|
||||
_dataChanged = false;
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include <iostream>
|
||||
|
||||
#include <messmer/cpp-utils/pointer/unique_ref.h>
|
||||
#include <mutex>
|
||||
|
||||
namespace blockstore {
|
||||
namespace ondisk {
|
||||
@ -37,6 +38,8 @@ private:
|
||||
void _fillDataWithZeroes();
|
||||
void _storeToDisk() const;
|
||||
|
||||
std::mutex _mutex;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(OnDiskBlock);
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user