示例#1
0
        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
        }