@@ -139,9 +139,9 @@ void TempSpace::FreeSegmentBySize::addSegment(Segment* const segment)
139139 {
140140 SegmentsStack* const cur = &m_items.current ();
141141 segment->next = nullptr ;
142- segment->prev = cur->head ;
143- cur->head ->next = segment;
144- cur->head = segment;
142+ segment->prev = cur->tail ;
143+ cur->tail ->next = segment;
144+ cur->tail = segment;
145145 }
146146 else
147147 {
@@ -162,7 +162,7 @@ void TempSpace::FreeSegmentBySize::removeSegment(Segment* const segment)
162162 if (segment->prev )
163163 {
164164 segment->prev ->next = nullptr ;
165- cur->head = segment->prev ;
165+ cur->tail = segment->prev ;
166166 segment->prev = nullptr ;
167167 }
168168 else
@@ -186,8 +186,8 @@ TempSpace::Segment* TempSpace::FreeSegmentBySize::getSegment(FB_SIZE_T size)
186186 if (m_items.locate (locGreatEqual, size))
187187 {
188188 SegmentsStack* const cur = &m_items.current ();
189- fb_assert (cur->head );
190- return cur->head ;
189+ fb_assert (cur->tail );
190+ return cur->tail ;
191191 }
192192 return nullptr ;
193193}
@@ -681,15 +681,32 @@ UCHAR* TempSpace::findMemory(offset_t& begin, offset_t end, size_t size) const
681681
682682bool TempSpace::validate (offset_t & free) const
683683{
684+ FB_SIZE_T cnt = 0 ;
684685 free = 0 ;
685686 FreeSegmentTree::ConstAccessor accessor (&freeSegments);
686687 for (bool found = accessor.getFirst (); found; found = accessor.getNext ())
687688 {
688689 const offset_t size = accessor.current ()->size ;
689690 fb_assert (size != 0 );
690691 free += size;
692+ cnt++;
691693 }
692694
695+ FreeSegmentsStackTree::ConstAccessor stackAccessor (&freeSegmentsBySize.m_items );
696+ for (bool found = stackAccessor.getFirst (); found; found = stackAccessor.getNext ())
697+ {
698+ const SegmentsStack* const stack = &stackAccessor.current ();
699+ const Segment* cur = stack->tail ;
700+ fb_assert (cur->next == NULL );
701+ while (cur)
702+ {
703+ cnt--;
704+ fb_assert (cur->size == stack->size );
705+ cur = cur->prev ;
706+ }
707+ }
708+ fb_assert (cnt == 0 );
709+
693710 offset_t disk = 0 ;
694711 for (FB_SIZE_T i = 0 ; i < tempFiles.getCount (); i++)
695712 disk += tempFiles[i]->getSize ();
0 commit comments