Commit d8da97b0 authored by Michael Widenius's avatar Michael Widenius

MDEV-14762 Server crashes in MDL_ticket::has_stronger_or_equal_type upon...

MDEV-14762 Server crashes in MDL_ticket::has_stronger_or_equal_type upon inserting into temporary sequence

Fix is to not upgrade MDL locks for temporary tables
parent 3dd01669
...@@ -10,3 +10,10 @@ select * from s1; ...@@ -10,3 +10,10 @@ select * from s1;
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
1001 1 9223372036854775806 1 1 1000 0 0 1001 1 9223372036854775806 1 1 1000 0 0
drop temporary sequence s1; drop temporary sequence s1;
#
# MDEV-14762 Server crashes in MDL_ticket::has_stronger_or_equal_type
# upon inserting into temporary sequence
#
CREATE TEMPORARY SEQUENCE s1 ENGINE=InnoDB;
INSERT INTO s1 VALUES (1, 1, 1000, 1, 1, 1, 1, 0);
DROP TEMPORARY SEQUENCE s1;
...@@ -14,3 +14,12 @@ alter table s1 engine myisam; ...@@ -14,3 +14,12 @@ alter table s1 engine myisam;
select nextval(s1); select nextval(s1);
select * from s1; select * from s1;
drop temporary sequence s1; drop temporary sequence s1;
--echo #
--echo # MDEV-14762 Server crashes in MDL_ticket::has_stronger_or_equal_type
--echo # upon inserting into temporary sequence
--echo #
CREATE TEMPORARY SEQUENCE s1 ENGINE=InnoDB;
INSERT INTO s1 VALUES (1, 1, 1000, 1, 1, 1, 1, 0);
DROP TEMPORARY SEQUENCE s1;
...@@ -237,9 +237,12 @@ int ha_sequence::write_row(uchar *buf) ...@@ -237,9 +237,12 @@ int ha_sequence::write_row(uchar *buf)
THD *thd= table->in_use; THD *thd= table->in_use;
if (thd->lock->table_count != 1) if (thd->lock->table_count != 1)
DBUG_RETURN(ER_WRONG_INSERT_INTO_SEQUENCE); DBUG_RETURN(ER_WRONG_INSERT_INTO_SEQUENCE);
if (thd->mdl_context.upgrade_shared_lock(table->mdl_ticket, MDL_EXCLUSIVE, if (table->s->tmp_table == NO_TMP_TABLE &&
thd->variables.lock_wait_timeout)) thd->mdl_context.upgrade_shared_lock(table->mdl_ticket,
DBUG_RETURN(ER_LOCK_WAIT_TIMEOUT); MDL_EXCLUSIVE,
thd->variables.
lock_wait_timeout))
DBUG_RETURN(ER_LOCK_WAIT_TIMEOUT);
tmp_seq.read_fields(table); tmp_seq.read_fields(table);
if (tmp_seq.check_and_adjust(0)) if (tmp_seq.check_and_adjust(0))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment