public void Flush()
{
lock (this) {
bool changes = false;
long newVisP = visAreaPointer;
long newDelP = delAreaPointer;
try {
Store.Lock();
// If the lists changed, then Write new state areas to the store.
if (visListChange) {
newVisP = WriteListToStore(visibleList);
visListChange = false;
changes = true;
}
if (delListChange) {
newDelP = WriteListToStore(deleteList);
delListChange = false;
changes = true;
}
// Commit the changes,
if (changes) {
headerArea.Position = 16;
headerArea.WriteInt8(newVisP);
headerArea.WriteInt8(newDelP);
headerArea.Flush();
if (visAreaPointer != newVisP) {
Store.DeleteArea(visAreaPointer);
visAreaPointer = newVisP;
}
if (delAreaPointer != newDelP) {
Store.DeleteArea(delAreaPointer);
delAreaPointer = newDelP;
}
}
} finally {
Store.Unlock();
}
}
}