summaryrefslogtreecommitdiff
path: root/storage/maria/ma_check.c
diff options
context:
space:
mode:
Diffstat (limited to 'storage/maria/ma_check.c')
-rw-r--r--storage/maria/ma_check.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/storage/maria/ma_check.c b/storage/maria/ma_check.c
index d0613d4f0d8..998bb984452 100644
--- a/storage/maria/ma_check.c
+++ b/storage/maria/ma_check.c
@@ -167,6 +167,9 @@ int maria_chk_status(HA_CHECK *param, MARIA_HA *info)
{
MARIA_SHARE *share= info->s;
+ /* Protection for HA_EXTRA_FLUSH */
+ mysql_mutex_lock(&share->intern_lock);
+
if (maria_is_crashed_on_repair(info))
_ma_check_print_warning(param,
"Table is marked as crashed and last repair failed");
@@ -189,6 +192,9 @@ int maria_chk_status(HA_CHECK *param, MARIA_HA *info)
if (param->testflag & T_UPDATE_STATE)
param->warning_printed=save;
}
+
+ mysql_mutex_unlock(&share->intern_lock);
+
if (share->state.create_trid > param->max_trid)
{
param->wrong_trd_printed= 1; /* Force should run zerofill */
@@ -916,7 +922,7 @@ static int chk_index(HA_CHECK *param, MARIA_HA *info, MARIA_KEYDEF *keyinfo,
info->last_key.keyinfo= tmp_key.keyinfo= keyinfo;
info->lastinx= ~0; /* Safety */
tmp_key.data= tmp_key_buff;
- for ( ;; )
+ for ( ;; _ma_copy_key(&info->last_key, &tmp_key))
{
if (nod_flag)
{
@@ -998,7 +1004,6 @@ static int chk_index(HA_CHECK *param, MARIA_HA *info, MARIA_KEYDEF *keyinfo,
tmp_key.data);
}
}
- _ma_copy_key(&info->last_key, &tmp_key);
(*key_checksum)+= maria_byte_checksum(tmp_key.data, tmp_key.data_length);
record= _ma_row_pos_from_key(&tmp_key);
@@ -5756,7 +5761,7 @@ static int sort_insert_key(MARIA_SORT_PARAM *sort_param,
a_length= share->keypage_header + nod_flag;
key_block->end_pos= anc_buff + share->keypage_header;
bzero(anc_buff, share->keypage_header);
- _ma_store_keynr(share, anc_buff, sort_param->key);
+ _ma_store_keynr(share, anc_buff, sort_param->keyinfo->key_nr);
lastkey=0; /* No previous key in block */
}
else