diff options
author | MySQL Build Team <build@mysql.com> | 2010-06-22 21:52:43 +0200 |
---|---|---|
committer | MySQL Build Team <build@mysql.com> | 2010-06-22 21:52:43 +0200 |
commit | a71e58a8f67be06e90b47f213d8a8957f4302f37 (patch) | |
tree | fd68236b7100b9b5f915d11daa342b3dba67e427 | |
parent | abb5bb9b8cd625ada17e9e1a128798d1f0fdfe31 (diff) | |
download | mariadb-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.c | 10 |
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); |