mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Manual merge
include/my_base.h: Auto merged include/my_global.h: Auto merged include/my_sys.h: Auto merged myisam/mi_check.c: Auto merged myisam/mi_extra.c: Auto merged myisam/mi_locking.c: Auto merged myisam/myisamchk.c: Auto merged myisam/myisamdef.h: Auto merged mysql-test/r/key_cache.result: Auto merged mysql-test/t/key_cache.test: Auto merged sql/ha_myisam.cc: Auto merged sql/handler.cc: Auto merged sql/handler.h: Auto merged sql/item_cmpfunc.h: Auto merged sql/mysql_priv.h: Auto merged sql/opt_range.cc: Auto merged sql/set_var.h: Auto merged sql/sql_base.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_table.cc: Auto merged sql/table.h: Auto merged
This commit is contained in:
@ -34,6 +34,7 @@ int mi_lock_database(MI_INFO *info, int lock_type)
|
||||
uint count;
|
||||
MYISAM_SHARE *share=info->s;
|
||||
uint flag;
|
||||
uint switch_fl= 0;
|
||||
DBUG_ENTER("mi_lock_database");
|
||||
|
||||
if (share->options & HA_OPTION_READ_ONLY_DATA ||
|
||||
@ -58,12 +59,26 @@ int mi_lock_database(MI_INFO *info, int lock_type)
|
||||
else
|
||||
count= --share->w_locks;
|
||||
--share->tot_locks;
|
||||
/*
|
||||
During a key cache reassignment the current and registered
|
||||
key caches for the table are different.
|
||||
Although at present key cache ressignment is always
|
||||
performed with a shared cache for the table acquired,
|
||||
for future possible optimizations we still
|
||||
handle this situation as if we could come to this point
|
||||
during the ressignment (in non-reassignment thread).
|
||||
*/
|
||||
if (info->lock_type == F_WRLCK && !share->w_locks &&
|
||||
!share->delay_key_write && flush_key_blocks(share->kfile,FLUSH_KEEP))
|
||||
((switch_fl= share->keycache != share->reg_keycache) ||
|
||||
!share->delay_key_write) &&
|
||||
flush_key_blocks(*share->keycache, share->kfile,
|
||||
switch_fl ? FLUSH_RELEASE : FLUSH_KEEP))
|
||||
{
|
||||
error=my_errno;
|
||||
mi_mark_crashed(info); /* Mark that table must be checked */
|
||||
}
|
||||
if (switch_fl)
|
||||
share->keycache= share->reg_keycache;
|
||||
if (info->opt_flag & (READ_CACHE_USED | WRITE_CACHE_USED))
|
||||
{
|
||||
if (end_io_cache(&info->rec_cache))
|
||||
@ -393,7 +408,7 @@ int _mi_test_if_changed(register MI_INFO *info)
|
||||
{ /* Keyfile has changed */
|
||||
DBUG_PRINT("info",("index file changed"));
|
||||
if (share->state.process != share->this_process)
|
||||
VOID(flush_key_blocks(share->kfile,FLUSH_RELEASE));
|
||||
VOID(flush_key_blocks(*share->keycache,share->kfile,FLUSH_RELEASE));
|
||||
share->last_process=share->state.process;
|
||||
info->last_unique= share->state.unique;
|
||||
info->last_loop= share->state.update_count;
|
||||
|
Reference in New Issue
Block a user