From: Magne Mahre Date: November 24 2008 11:34am Subject: bzr commit into mysql-6.0-runtime branch (magne.mahre:2752) Bug#38661 List-Archive: http://lists.mysql.com/commits/59668 X-Bug: 38661 Message-Id: <200811241134.mAOBYwob013647@dm-uk-02.uk.sun.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit #At file:///home/mm136784/z/mysql-6.0-runtime/ based on revid:kostja@stripped 2752 Magne Mahre 2008-11-24 Bug #38661 all threads hang in "opening tables" or "waiting for table" and cpu is at 100% A race between open_tables and a "flush table" operation resulted in neither being able to complete. open_tables was not able to open the table and initiated a recover. The conditions for completing the recovery were too strict and couldn't be achieved while the flush was running. The solution was to loosen the requirement that said that a share couldn't exist without a table, since this is actually a valid condition in certain cases. modified: sql/sql_base.cc === modified file 'sql/sql_base.cc' === modified file 'sql/sql_base.cc' --- a/sql/sql_base.cc 2008-11-18 19:41:51 +0000 +++ b/sql/sql_base.cc 2008-11-24 11:27:20 +0000 @@ -7678,8 +7678,7 @@ mdl_get_tdc_key(lock_data, &key); if ((share= (TABLE_SHARE*) hash_search(&table_def_cache, (uchar*) key.str, key.length)) && - share->version != refresh_version && - !share->used_tables.is_empty()) + share->version != refresh_version) break; } if (!lock_data)