mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 14:02:32 +01:00
b4dd13b519
if two threads were calling mi_assign_to_key_cache() for the same table, one could change share->key_cache while the other was having share->key_cache->op_lock locked. The other thread would crash then, trying to unlock share->key_cache->op_lock (because it would be a different mutex). fixed by caching the value of share->key_cache in a local variable. The thread can still call flush_key_blocks() for an unassigned keycache, but it's harmless.
27 lines
649 B
Text
27 lines
649 B
Text
#
|
|
# MDEV-5405 RQG induced crash in mi_assign_to_key_cache in safe mutex unlock
|
|
#
|
|
--source include/have_debug_sync.inc
|
|
create table t1 (f int, key(f)) engine=myisam;
|
|
set global kc1.key_buffer_size = 65536;
|
|
|
|
connect (con1, localhost, root);
|
|
|
|
set debug_sync='assign_key_cache_op_unlock wait_for op_locked';
|
|
send cache index t1 in kc1;
|
|
|
|
connection default;
|
|
sleep 1;
|
|
set debug_sync='assign_key_cache_op_lock signal op_locked wait_for assigned';
|
|
send cache index t1 in kc1;
|
|
|
|
connection con1;
|
|
reap;
|
|
set debug_sync='now signal assigned';
|
|
disconnect con1;
|
|
connection default;
|
|
reap;
|
|
|
|
drop table t1;
|
|
set global kc1.key_buffer_size = 0;
|
|
set debug_sync='reset';
|