From ee5551e644cfae6bc1c95df0ff98d70a666dfdd2 Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Fri, 3 Sep 2010 13:01:47 +0300 Subject: [PATCH] Fixed bugs (mostly on sparc) that caused crashes in mysql-test-run sql/item_sum.cc: Fixed alignment problem that caused crases on sparc. (ORDER needs an aligment of 8 as it includes longlongs) storage/federatedx/ha_federatedx.cc: Fixed crash on sparc as 'pos' is not aligned on 4/8. storage/maria/ma_page.c: Removed wrong assert --- sql/item_sum.cc | 5 ++--- storage/federatedx/ha_federatedx.cc | 5 ++++- storage/maria/ma_page.c | 3 +-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 934003ead19..45c3ee3cd20 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -3064,10 +3064,10 @@ Item_func_group_concat::Item_func_group_concat(THD *thd, object being copied. */ ORDER *tmp; - if (!(order= (ORDER **) thd->alloc(sizeof(ORDER *) * arg_count_order + + if (!(tmp= (ORDER *) thd->alloc(sizeof(ORDER *) * arg_count_order + sizeof(ORDER) * arg_count_order))) return; - tmp= (ORDER *)(order + arg_count_order); + order= (ORDER **)(tmp + arg_count_order); for (uint i= 0; i < arg_count_order; i++, tmp++) { memcpy(tmp, item->order[i], sizeof(ORDER)); @@ -3076,7 +3076,6 @@ Item_func_group_concat::Item_func_group_concat(THD *thd, } - void Item_func_group_concat::cleanup() { DBUG_ENTER("Item_func_group_concat::cleanup"); diff --git a/storage/federatedx/ha_federatedx.cc b/storage/federatedx/ha_federatedx.cc index b5215b17f62..c3105de7a94 100644 --- a/storage/federatedx/ha_federatedx.cc +++ b/storage/federatedx/ha_federatedx.cc @@ -2967,10 +2967,13 @@ int ha_federatedx::rnd_pos(uchar *buf, uchar *pos) DBUG_ENTER("ha_federatedx::rnd_pos"); ha_statistic_increment(&SSV::ha_read_rnd_count); + /* We have to move this to 'ref' to get things aligned */ + bmove(ref, pos, ref_length); + if ((retval= txn->acquire(share, TRUE, &io))) goto error; - if ((retval= io->seek_position(&result, pos))) + if ((retval= io->seek_position(&result, ref))) goto error; retval= read_next(buf, result); diff --git a/storage/maria/ma_page.c b/storage/maria/ma_page.c index acbee2a6f07..80a9c4f486f 100644 --- a/storage/maria/ma_page.c +++ b/storage/maria/ma_page.c @@ -423,8 +423,7 @@ my_off_t _ma_new(register MARIA_HA *info, int level, share->key_del_current= mi_sizekorr(buff+share->keypage_header); #ifndef DBUG_OFF key_del_current= share->key_del_current; - DBUG_ASSERT(key_del_current != share->state.key_del && - (key_del_current != 0) && + DBUG_ASSERT((key_del_current != 0) && ((key_del_current == HA_OFFSET_ERROR) || (key_del_current <= (share->state.state.key_file_length - block_size))));