summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_base.cc14
-rw-r--r--sql/sql_lex.cc7
2 files changed, 11 insertions, 10 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 3ac6b6ed635..657688499db 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -686,7 +686,6 @@ static TABLE_SHARE
void release_table_share(TABLE_SHARE *share)
{
- bool to_be_deleted= 0;
DBUG_ENTER("release_table_share");
DBUG_PRINT("enter",
("share: 0x%lx table: %s.%s ref_count: %u version: %lu",
@@ -700,7 +699,7 @@ void release_table_share(TABLE_SHARE *share)
{
if (share->version != refresh_version ||
table_def_shutdown_in_progress)
- to_be_deleted=1;
+ my_hash_delete(&table_def_cache, (uchar*) share);
else
{
/* Link share last in used_table_share list */
@@ -712,15 +711,14 @@ void release_table_share(TABLE_SHARE *share)
end_of_unused_share.prev= &share->next;
share->next= &end_of_unused_share;
- to_be_deleted= (table_def_cache.records > table_def_size);
+ if (table_def_cache.records > table_def_size)
+ {
+ /* Delete the least used share to preserve LRU order. */
+ my_hash_delete(&table_def_cache, (uchar*) oldest_unused_share);
+ }
}
}
- if (to_be_deleted)
- {
- DBUG_PRINT("info", ("Deleting share"));
- my_hash_delete(&table_def_cache, (uchar*) share);
- }
DBUG_VOID_RETURN;
}
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index e87204ffd40..3f3c650d1e8 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -435,8 +435,11 @@ void lex_end(LEX *lex)
DBUG_PRINT("enter", ("lex: 0x%lx", (long) lex));
/* release used plugins */
- plugin_unlock_list(0, (plugin_ref*)lex->plugins.buffer,
- lex->plugins.elements);
+ if (lex->plugins.elements) /* No function call and no mutex if no plugins. */
+ {
+ plugin_unlock_list(0, (plugin_ref*)lex->plugins.buffer,
+ lex->plugins.elements);
+ }
reset_dynamic(&lex->plugins);
DBUG_VOID_RETURN;