Bug#34409 LOCK_plugin contention via ha_release_temporary_latches/plugin_foreach

use thread-local data structures in ha_release_temporary_latches()
This commit is contained in:
Sergei Golubchik 2008-07-21 12:01:22 +02:00
parent 9115320342
commit 6077ebea1c

View File

@ -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;
}