From 29f9fb7a0a7df0136293aed63cd596bd45ff5b55 Mon Sep 17 00:00:00 2001 From: Konstantin Osipov Date: Mon, 7 Jun 2010 18:53:50 +0400 Subject: [PATCH] Backport two small cleanups from trunk-iplus tree: 1) No mutex and no function call if we're not using plugins. 2) If we're above the table definition cache limit, delete the oldest unused share, not the share on our hands. sql/sql_base.cc: If we're above the table definition cache limit, delete the oldest unused share, not the share on our hands. sql/sql_lex.cc: No mutex and no function call if we're not using plugins. --- sql/sql_base.cc | 14 ++++++-------- sql/sql_lex.cc | 7 +++++-- 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;