diff --git a/mysql-test/include/handler.inc b/mysql-test/include/handler.inc index a5ab97996bb..3264521c4f5 100644 --- a/mysql-test/include/handler.inc +++ b/mysql-test/include/handler.inc @@ -1522,3 +1522,23 @@ HANDLER t2 READ FIRST; HANDLER t2 CLOSE; DROP TABLE t1, t2; + + +--echo # +--echo # Bug#50912 Assertion `ticket->m_type >= mdl_request->type' +--echo # failed on HANDLER + I_S +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +CREATE TABLE t1 (id INT); +HANDLER t1 OPEN; + +# This used to trigger the assert. +SELECT table_name, table_comment FROM information_schema.tables + WHERE table_schema= 'test' AND table_name= 't1'; + +HANDLER t1 CLOSE; +DROP TABLE t1; diff --git a/mysql-test/r/handler_innodb.result b/mysql-test/r/handler_innodb.result index 90b0d0bb8fe..cc196dcf392 100644 --- a/mysql-test/r/handler_innodb.result +++ b/mysql-test/r/handler_innodb.result @@ -1476,3 +1476,16 @@ HANDLER t2 READ FIRST; i HANDLER t2 CLOSE; DROP TABLE t1, t2; +# +# Bug#50912 Assertion `ticket->m_type >= mdl_request->type' +# failed on HANDLER + I_S +# +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (id INT); +HANDLER t1 OPEN; +SELECT table_name, table_comment FROM information_schema.tables +WHERE table_schema= 'test' AND table_name= 't1'; +table_name table_comment +t1 +HANDLER t1 CLOSE; +DROP TABLE t1; diff --git a/mysql-test/r/handler_myisam.result b/mysql-test/r/handler_myisam.result index e52d559a197..4a043bf8161 100644 --- a/mysql-test/r/handler_myisam.result +++ b/mysql-test/r/handler_myisam.result @@ -1474,6 +1474,19 @@ i HANDLER t2 CLOSE; DROP TABLE t1, t2; # +# Bug#50912 Assertion `ticket->m_type >= mdl_request->type' +# failed on HANDLER + I_S +# +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (id INT); +HANDLER t1 OPEN; +SELECT table_name, table_comment FROM information_schema.tables +WHERE table_schema= 'test' AND table_name= 't1'; +table_name table_comment +t1 +HANDLER t1 CLOSE; +DROP TABLE t1; +# # BUG #46456: HANDLER OPEN + TRUNCATE + DROP (temporary) TABLE, crash # CREATE TABLE t1 AS SELECT 1 AS f1; diff --git a/sql/mdl.cc b/sql/mdl.cc index 2470ce5b4b7..54931f89e40 100644 --- a/sql/mdl.cc +++ b/sql/mdl.cc @@ -1261,7 +1261,7 @@ MDL_context::try_acquire_lock(MDL_request *mdl_request) if ((ticket= find_ticket(mdl_request, &is_transactional))) { DBUG_ASSERT(ticket->m_lock); - DBUG_ASSERT(ticket->m_type >= mdl_request->type); + DBUG_ASSERT(ticket->has_stronger_or_equal_type(mdl_request->type)); /* If the request is for a transactional lock, and we found a transactional lock, just reuse the found ticket. @@ -1349,7 +1349,7 @@ MDL_context::clone_ticket(MDL_request *mdl_request) return TRUE; /* clone() is not supposed to be used to get a stronger lock. */ - DBUG_ASSERT(ticket->m_type <= mdl_request->ticket->m_type); + DBUG_ASSERT(mdl_request->ticket->has_stronger_or_equal_type(ticket->m_type)); ticket->m_lock= mdl_request->ticket->m_lock; mdl_request->ticket= ticket;