OK to push
Olav Sandstaa wrote:
> #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();
> }
>
>
>
>
> ------------------------------------------------------------------------
>
>