summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMySQL Build Team <build@mysql.com>2010-06-22 21:52:43 +0200
committerMySQL Build Team <build@mysql.com>2010-06-22 21:52:43 +0200
commita71e58a8f67be06e90b47f213d8a8957f4302f37 (patch)
treefd68236b7100b9b5f915d11daa342b3dba67e427
parentabb5bb9b8cd625ada17e9e1a128798d1f0fdfe31 (diff)
downloadmariadb-git-a71e58a8f67be06e90b47f213d8a8957f4302f37.tar.gz
Backport into build-201006221614-5.1.46sp1
> ------------------------------------------------------------ > revno: 3351.14.74 > revision-id: marko.makela@oracle.com-20100504093128-44v6glupe1dsh0ug > parent: marko.makela@oracle.com-20100503122859-k73bl51re93o0mt4 > committer: Marko Mäkelä <marko.makela@oracle.com> > branch nick: 5.1-innodb > timestamp: Tue 2010-05-04 12:31:28 +0300 > message: > btr_page_split_and_insert(): Correct the fix of Bug #52964. > When split_rec==NULL, choose the correct node pointer key (first_rec).
-rw-r--r--storage/innodb_plugin/btr/btr0btr.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/storage/innodb_plugin/btr/btr0btr.c b/storage/innodb_plugin/btr/btr0btr.c
index cd8f42b3818..1d6b4f5a0e6 100644
--- a/storage/innodb_plugin/btr/btr0btr.c
+++ b/storage/innodb_plugin/btr/btr0btr.c
@@ -2003,9 +2003,13 @@ func_start:
split_rec = NULL;
goto insert_empty;
}
+ } else if (UNIV_UNLIKELY(insert_left)) {
+ first_rec = page_rec_get_next(page_get_infimum_rec(page));
+ move_limit = page_rec_get_next(btr_cur_get_rec(cursor));
} else {
insert_empty:
ut_ad(!split_rec);
+ ut_ad(!insert_left);
buf = mem_alloc(rec_get_converted_size(cursor->index,
tuple, n_ext));
@@ -2029,7 +2033,11 @@ insert_empty:
&& btr_page_insert_fits(cursor, split_rec,
offsets, tuple, n_ext, heap);
} else {
- mem_free(buf);
+ if (!insert_left) {
+ mem_free(buf);
+ buf = NULL;
+ }
+
insert_will_fit = !new_page_zip
&& btr_page_insert_fits(cursor, NULL,
NULL, tuple, n_ext, heap);