Skip to content

Commit de3f874

Browse files
committed
Rename head to tail for better understanding
Also add consistency check in validate function
1 parent 50193eb commit de3f874

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

src/jrd/TempSpace.cpp

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

682682
bool 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();

src/jrd/TempSpace.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,15 +200,15 @@ class TempSpace : public Firebird::File
200200
class SegmentsStack
201201
{
202202
public:
203-
SegmentsStack() : size(0), head(nullptr)
203+
SegmentsStack() : size(0), tail(nullptr)
204204
{}
205205

206206
SegmentsStack(offset_t aSize, Segment* aSegment) :
207-
size(aSize), head(aSegment)
207+
size(aSize), tail(aSegment)
208208
{}
209209

210210
offset_t size;
211-
Segment* head;
211+
Segment* tail;
212212

213213
static const offset_t& generate(const void* /*sender*/, const SegmentsStack& segment)
214214
{
@@ -232,6 +232,8 @@ class TempSpace : public Firebird::File
232232

233233
class FreeSegmentBySize
234234
{
235+
friend bool TempSpace::validate(offset_t& freeSize) const;
236+
235237
public:
236238
FreeSegmentBySize(MemoryPool& pool)
237239
: m_items(pool)

0 commit comments

Comments
 (0)