From: Sergei Golubchik Date: July 21 2008 10:01am Subject: bzr commit into mysql-5.1 branch (serg:2671) Bug#34409 List-Archive: http://lists.mysql.com/commits/50106 X-Bug: 34409 Message-Id: <20080721100129.14925.qmail@janus.mylan> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit #At file:///usr/home/serg/Abk/mysql/5.1/ 2671 Sergei Golubchik 2008-07-21 Bug#34409 LOCK_plugin contention via ha_release_temporary_latches/plugin_foreach use thread-local data structures in ha_release_temporary_latches() modified: sql/handler.cc per-file messages: sql/handler.cc Bug#34409 LOCK_plugin contention via ha_release_temporary_latches/plugin_foreach use thread-local data structures in ha_release_temporary_latches() === modified file 'sql/handler.cc' --- a/sql/handler.cc 2008-05-18 08:42:55 +0000 +++ b/sql/handler.cc 2008-07-21 10:01:22 +0000 @@ -1618,23 +1618,23 @@ bool mysql_xa_recover(THD *thd) @return always 0 */ -static my_bool release_temporary_latches(THD *thd, plugin_ref plugin, - void *unused) -{ - handlerton *hton= plugin_data(plugin, handlerton *); - - if (hton->state == SHOW_OPTION_YES && hton->release_temporary_latches) - hton->release_temporary_latches(hton, thd); - - return FALSE; -} - int ha_release_temporary_latches(THD *thd) { - plugin_foreach(thd, release_temporary_latches, MYSQL_STORAGE_ENGINE_PLUGIN, - NULL); + Ha_trx_info *info; + /* + Note that below we assume that only transactional storage engines + may need release_temporary_latches(). If this will ever become false, + we could iterate on thd->open_tables instead (and remove duplicates + as if (!seen[hton->slot]) { seen[hton->slot]=1; ... }). + */ + for (info= thd->transaction.stmt.ha_list; info; info= info->next()) + { + handlerton *hton= info->ht(); + if (hton && hton->release_temporary_latches) + hton->release_temporary_latches(hton, thd); + } return 0; }