mirror of
https://github.com/MariaDB/server.git
synced 2025-02-05 13:22:17 +01:00
dce4c0f979
When acquiring SNW/SNRW/X MDL lock DDL/admin statements may abort pending thr lock in concurrent connection with open HANDLER (or delayed insert thread). This may lead to a race condition when table->alias is accessed concurrently by such threads. Either assertion failure or memory leak is a practical consequence of this race condition. Specifically HANDLER is opening a table and issuing alias.copy(), while DDL executing get_lock_data()/alias.c_ptr()/realloc()/realloc_raw(). Fixed by perforimg table->init() before it is published via thd->open_tables.
32 lines
637 B
Text
32 lines
637 B
Text
--echo #
|
|
--echo # MDEV-22339 - Assertion `str_length < len' failed in
|
|
--echo # Binary_string::realloc_raw
|
|
--echo #
|
|
CREATE TABLE t1(a INT) ENGINE=MyISAM;
|
|
connect con1, localhost, root;
|
|
let $i=1000;
|
|
disable_query_log;
|
|
disable_result_log;
|
|
while ($i)
|
|
{
|
|
connection default;
|
|
HANDLER t1 OPEN;
|
|
send SELECT * FROM t1, t1 t1a1over8, t1 t1a2over8, t1 t1a3over8, t1 t1a4over8, t1 t1a5over8, t1 t1a6over8;
|
|
|
|
connection con1;
|
|
send REPAIR TABLE t1;
|
|
|
|
connection default;
|
|
reap;
|
|
HANDLER t1 CLOSE;
|
|
|
|
connection con1;
|
|
reap;
|
|
dec $i;
|
|
}
|
|
enable_query_log;
|
|
enable_result_log;
|
|
disconnect con1;
|
|
|
|
connection default;
|
|
DROP TABLE t1;
|