From: Jon Olav Hauglid Date: September 7 2010 8:42am Subject: bzr commit into mysql-5.5-runtime branch (jon.hauglid:3133) Bug#56494 List-Archive: http://lists.mysql.com/commits/117677 X-Bug: 56494 Message-Id: <201009070843.o8774Erk029667@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5680171949255351812==" --===============5680171949255351812== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-runtime-bug56494/ based on revid:jon.hauglid@stripped 3133 Jon Olav Hauglid 2010-09-07 Bug #56494 Segfault in upgrade_shared_lock_to_exclusive() for REPAIR of merge table This crash happened if a table maintenance statement (ANALYZE TABLE, REPAIR TABLE, etc.) was executed on a MERGE table and opening and locking a child table failed. This could for example happen if a child table did not exist or if a lock timeout happened while waiting for a conflicting metadata lock to disappear. Since opening and locking the MERGE table and its children failed, the tables would be closed and the metadata locks released. The table maintenance statement would however still try to continue and upgrade the metadata lock on the MERGE table. But since the lock already had been released, this caused a segfault. This patch fixes the problem by checking that we in fact have a metadata lock on the table before lock upgrade is attempted. Test case added to mdl_sync.test. modified: mysql-test/r/mdl_sync.result mysql-test/t/mdl_sync.test sql/sql_admin.cc === modified file 'mysql-test/r/mdl_sync.result' --- a/mysql-test/r/mdl_sync.result 2010-08-12 13:50:23 +0000 +++ b/mysql-test/r/mdl_sync.result 2010-09-07 08:42:15 +0000 @@ -2913,3 +2913,13 @@ UNLOCK TABLES; # Connection default UNLOCK TABLES; DROP DATABASE db1; +# +# Bug#56494 Segfault in upgrade_shared_lock_to_exclusive() for +# REPAIR of merge table +# +DROP TABLE IF EXISTS t1, t_not_exists; +CREATE TABLE t1(a int); +ALTER TABLE t1 ENGINE = MERGE UNION ( t_not_exists ); +REPAIR TABLE t1; +ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist +DROP TABLE t1; === modified file 'mysql-test/t/mdl_sync.test' --- a/mysql-test/t/mdl_sync.test 2010-08-12 13:50:23 +0000 +++ b/mysql-test/t/mdl_sync.test 2010-09-07 08:42:15 +0000 @@ -4532,6 +4532,23 @@ disconnect con2; disconnect con3; +--echo # +--echo # Bug#56494 Segfault in upgrade_shared_lock_to_exclusive() for +--echo # REPAIR of merge table +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1, t_not_exists; +--enable_warnings + +CREATE TABLE t1(a int); +ALTER TABLE t1 ENGINE = MERGE UNION ( t_not_exists ); +--error ER_WRONG_MRG_TABLE +REPAIR TABLE t1; + +DROP TABLE t1; + + # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. --source include/wait_until_count_sessions.inc === modified file 'sql/sql_admin.cc' --- a/sql/sql_admin.cc 2010-08-18 11:29:04 +0000 +++ b/sql/sql_admin.cc 2010-09-07 08:42:15 +0000 @@ -488,7 +488,8 @@ static bool mysql_admin_table(THD* thd, */ if (lock_type == TL_WRITE && !table->table->s->tmp_table) { - if (wait_while_table_is_used(thd, table->table, + if (!table->table->mdl_ticket || + wait_while_table_is_used(thd, table->table, HA_EXTRA_PREPARE_FOR_RENAME)) goto err; DEBUG_SYNC(thd, "after_admin_flush"); --===============5680171949255351812== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-5.5-runtime-bug56494/ # testament_sha1: fb14a0d3f3edc40f99143c087c8304f97a32ff96 # timestamp: 2010-09-07 10:42:19 +0200 # source_branch: file:///export/home/x/mysql-5.5-bugfixing/ # base_revision_id: jon.hauglid@stripped\ # zesazp04nton9ozx # # Begin bundle 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 --===============5680171949255351812==--