private void TruncateTo(int newTopIndex) { lock (log) { while (log.Count > newTopIndex) { if (log[log.Count - 1].WasExecuted) { throw new InvalidOperationException("Removing entry " + (log.Count - 1) + " which has already been executed"); } if (DebugState != null) { DebugState.SignalLogRemoval(log.Count - 1, log[log.Count - 1].Entry.Term); } log.RemoveAt(log.Count - 1); } } }