diff options
-rw-r--r-- | myisam/mi_check.c | 5 | ||||
-rw-r--r-- | myisam/myisamchk.c | 4 | ||||
-rw-r--r-- | myisam/myisamdef.h | 1 | ||||
-rw-r--r-- | myisam/sort.c | 7 | ||||
-rw-r--r-- | sql/ha_myisam.cc | 5 |
5 files changed, 20 insertions, 2 deletions
diff --git a/myisam/mi_check.c b/myisam/mi_check.c index aa1043b2bf8..ba90b2c5bcf 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -2508,7 +2508,7 @@ static int sort_key_read(MI_SORT_PARAM *sort_param, void *key) DBUG_RETURN(1); } sort_param->real_key_length= - (info->s->rec_reflength+ + (info->s->rec_reflength+ _mi_make_key(info, sort_param->key, (uchar*) key, sort_param->record, sort_param->filepos)); #ifdef HAVE_purify @@ -2587,6 +2587,9 @@ static int sort_get_next_record(MI_SORT_PARAM *sort_param) char llbuff[22],llbuff2[22]; DBUG_ENTER("sort_get_next_record"); + if (*killed_ptr(param)) + DBUG_RETURN(1); + switch (share->data_file_type) { case STATIC_RECORD: for (;;) diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c index 656d536f159..ca4e430d49b 100644 --- a/myisam/myisamchk.c +++ b/myisam/myisamchk.c @@ -1636,6 +1636,10 @@ err: DBUG_RETURN(1); } /* sort_record_index */ +volatile bool *killed_ptr(MI_CHECK *param) +{ + return (bool *)(param->thd); /* always NULL */ +} /* print warnings and errors */ /* VARARGS */ diff --git a/myisam/myisamdef.h b/myisam/myisamdef.h index 7f8b6dc41fd..6499021861e 100644 --- a/myisam/myisamdef.h +++ b/myisam/myisamdef.h @@ -648,6 +648,7 @@ void mi_setup_functions(register MYISAM_SHARE *share); int _mi_init_bulk_insert(MI_INFO *info, ulong cache_size); /* Functions needed by mi_check */ +volatile bool *killed_ptr(MI_CHECK *param); void mi_check_print_error _VARARGS((MI_CHECK *param, const char *fmt,...)); void mi_check_print_warning _VARARGS((MI_CHECK *param, const char *fmt,...)); void mi_check_print_info _VARARGS((MI_CHECK *param, const char *fmt,...)); diff --git a/myisam/sort.c b/myisam/sort.c index 5819fb7b493..0e69e41ed5c 100644 --- a/myisam/sort.c +++ b/myisam/sort.c @@ -284,7 +284,7 @@ pthread_handler_decl(thr_find_all_keys,arg) uint memavl,old_memavl,keys,sort_length; uint idx, maxbuffer; uchar **sort_keys=0; - + error=1; if (my_thread_init()) @@ -701,6 +701,7 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file, uchar *strpos; BUFFPEK *buffpek,**refpek; QUEUE queue; + volatile bool *killed= killed_ptr(info->sort_info->param); DBUG_ENTER("merge_buffers"); count=error=0; @@ -732,6 +733,10 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file, { for (;;) { + if (*killed) + { + error=1; goto err; + } buffpek=(BUFFPEK*) queue_top(&queue); if (to_file) { diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 59fd8ab0424..64dbcfe2056 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -87,6 +87,11 @@ static void mi_check_print_msg(MI_CHECK *param, const char* msg_type, extern "C" { +volatile bool *killed_ptr(MI_CHECK *param) +{ + return &(((THD *)(param->thd))->killed); +} + void mi_check_print_error(MI_CHECK *param, const char *fmt,...) { param->error_printed|=1; |