public override void FreeSegment(Segment seg) { //remove it from cache this.m_cache.Delete(seg.SegmentID); //remove it from LRU list seg.BreakLinks(); uint offset = 0; int length = -1; if (m_segTree.GetAddr(seg.SegmentID, ref offset, ref length)) { Debug.Assert(length != -1); //this segment's addressing info is in the system. //put this segment into the free tree m_spaceTree.SetSegmentFree(offset, length); //remove its addressing information from segTree m_segTree.DeleteSegment(seg.SegmentID); } //if this segment is never written back to disk, just delete it from memory is enough }