seqnumlive(true),
freespace(SLOT_SIZE - getBaseSize()),
table(_table),
- localSequenceNumber(_localSequenceNumber) {
+ localSequenceNumber(_localSequenceNumber),
+ fakeLastMessage(NULL) {
}
Slot::Slot(Table *_table, int64_t _seqnum, int64_t _machineid, Array<char> *_prevhmac, int64_t _localSequenceNumber) :
seqnumlive(true),
freespace(SLOT_SIZE - getBaseSize()),
table(_table),
- localSequenceNumber(_localSequenceNumber) {
+ localSequenceNumber(_localSequenceNumber),
+ fakeLastMessage(NULL) {
}
Slot::Slot(Table *_table, int64_t _seqnum, int64_t _machineid, int64_t _localSequenceNumber) :
seqnumlive(true),
freespace(SLOT_SIZE - getBaseSize()),
table(_table),
- localSequenceNumber(_localSequenceNumber) {
+ localSequenceNumber(_localSequenceNumber),
+ fakeLastMessage(NULL) {
}
Slot::~Slot() {
for(uint i=0; i< entries->size(); i++)
delete entries->get(i);
delete entries;
+ if (fakeLastMessage)
+ delete fakeLastMessage;
}
Entry *Slot::addEntry(Entry *e) {
}
}
- if (seqnumlive && !resize)
- liveEntries->add(new LastMessage(this, machineid, seqnum));
-
+ if (seqnumlive && !resize) {
+ if (! fakeLastMessage)
+ fakeLastMessage = new LastMessage(this, machineid, seqnum);
+ liveEntries->add(fakeLastMessage);
+ }
return liveEntries;
}
buffer->putLong(machineid);
int64_t localSequenceNumberShift = localSequenceNumber << 16;
buffer->putLong(localSequenceNumberShift);
- return buffer->array();
+ Array<char> * array = buffer->array();
+ buffer->releaseArray();
+ delete buffer;
+ return array;
}