#At file:///home/os136802/mysql/develop/repo/falcon-bug44292/ based on revid:john.embretsen@stripped
2707 Olav Sandstaa 2009-05-18
Fix for Bug#44292 falcon_bug_34351_C fails with assertion (false) in file RecordLocatorPage.cpp
This crash was caused by an inconsistency in the RecordLocator
page. In some situations the maxLine value was not updates when
inserting new space management slots. This could cause later updates
to the record locator page to introduce inconsistencies in the record
index.
This patch changes RecordLocatorPage::setIndexSlot() to handle
situations where the slot to be inserted has a slot number larger than
the maxLine value. Before this patch if a slot number that was larger
than the current maxLine value was inserted, the maxLine value was not
updated accordingly. The fix is to update the maxLine value based on
the inserted slot number.
@ storage/falcon/RecordLocatorPage.cpp
Fix for inconsistency in RecordLocatorPage. RecordLocatorPage::setIndexSlot() is changed so that it handles situations where the slot to be inserted on the page has a slot number that is
larger than the maxLine value.
modified:
storage/falcon/RecordLocatorPage.cpp
=== modified file 'storage/falcon/RecordLocatorPage.cpp'
--- a/storage/falcon/RecordLocatorPage.cpp 2009-04-14 17:21:13 +0000
+++ b/storage/falcon/RecordLocatorPage.cpp 2009-05-18 09:42:26 +0000
@@ -360,6 +360,7 @@ void RecordLocatorPage::setIndexSlot(int
elements[spaceSlot].spaceAvailable = availableSpace;
element->page = pageNumber;
element->line = line;
+ maxLine = MAX(maxLine, slot + 1);
//validateSpaceSlots();
return;
@@ -379,6 +380,7 @@ void RecordLocatorPage::setIndexSlot(int
element->page = pageNumber;
element->line = line;
insertSpaceSlot(slot, availableSpace);
+ maxLine = MAX(maxLine, slot + 1);
//validateSpaceSlots();
}
Attachment: [text/bzr-bundle] bzr/olav@sun.com-20090518094226-0bt39y8v3qfya117.bundle