Ruby: Correct DataBlock =operator
The =operator for the DataBlock class was incorrectly interpreting the class member m_alloc. This variable stands for whether the assigned memory for the data block needs to be freed or not by the class itself. It seems that the =operator interpreted the variable as whether the memory is assigned to the data block. This wrong interpretation was causing values not to propagate to RubySystem::m_mem_vec_ptr. This caused major issues with restoring from checkpoints when using a protocol which verified that the cache data was consistent with the backing store (i.e. MOESI-hammer).
This commit is contained in:
@@ -87,14 +87,6 @@ DataBlock::setData(uint8* data, int offset, int len)
|
||||
DataBlock &
|
||||
DataBlock::operator=(const DataBlock & obj)
|
||||
{
|
||||
if (this == &obj) {
|
||||
// assert(false);
|
||||
} else {
|
||||
if (!m_alloc)
|
||||
m_data = new uint8[RubySystem::getBlockSizeBytes()];
|
||||
memcpy(m_data, obj.m_data, RubySystem::getBlockSizeBytes());
|
||||
m_alloc = true;
|
||||
}
|
||||
|
||||
memcpy(m_data, obj.m_data, RubySystem::getBlockSizeBytes());
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#ifndef __MEM_RUBY_COMMON_DATABLOCK_HH__
|
||||
#define __MEM_RUBY_COMMON_DATABLOCK_HH__
|
||||
|
||||
#include <cassert>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
|
||||
@@ -72,6 +73,7 @@ class DataBlock
|
||||
inline void
|
||||
DataBlock::assign(uint8* data)
|
||||
{
|
||||
assert(data != NULL);
|
||||
if (m_alloc) {
|
||||
delete [] m_data;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user