diff options
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r-- | sql/sql_base.cc | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 47d709e8225..c227fd12f5b 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -440,7 +440,7 @@ static void table_def_unuse_table(TABLE *table) DBUG_ASSERT(table->in_use); /* We shouldn't put the table to 'unused' list if the share is old. */ - DBUG_ASSERT(table->s->version == refresh_version); + DBUG_ASSERT(! table->s->needs_reopen()); table->in_use= 0; /* Remove table from the list of tables used in this share. */ @@ -562,7 +562,9 @@ found: DBUG_RETURN(0); } - if (!share->ref_count++ && share->prev) + ++share->ref_count; + + if (share->ref_count == 1 && share->prev) { /* Share was not used before and it was in the old_unused_share list @@ -700,8 +702,7 @@ void release_table_share(TABLE_SHARE *share) DBUG_ASSERT(share->ref_count); if (!--share->ref_count) { - if (share->version != refresh_version || - table_def_shutdown_in_progress) + if (share->needs_reopen() || table_def_shutdown_in_progress) my_hash_delete(&table_def_cache, (uchar*) share); else { @@ -836,7 +837,7 @@ OPEN_TABLE_LIST *list_open_tables(THD *thd, const char *db, const char *wild) I_P_List_iterator<TABLE, TABLE_share> it(share->used_tables); while (it++) ++(*start_list)->in_use; - (*start_list)->locked= (share->version == 0) ? 1 : 0; + (*start_list)->locked= 0; /* Obsolete. */ start_list= &(*start_list)->next; *start_list=0; } @@ -1071,7 +1072,7 @@ bool close_cached_tables(THD *thd, TABLE_LIST *tables, bool have_lock, { TABLE_SHARE *share=(TABLE_SHARE*) my_hash_element(&table_def_cache, idx); - if (share->version != refresh_version) + if (share->needs_reopen()) { found= TRUE; break; @@ -1083,7 +1084,7 @@ bool close_cached_tables(THD *thd, TABLE_LIST *tables, bool have_lock, for (TABLE_LIST *table= tables; table; table= table->next_local) { TABLE_SHARE *share= get_cached_table_share(table->db, table->table_name); - if (share && share->version != refresh_version) + if (share && share->needs_reopen()) { found= TRUE; break; @@ -2979,7 +2980,7 @@ bool open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, } #endif - if (share->version != refresh_version) + if (share->needs_reopen()) { if (!(flags & MYSQL_OPEN_IGNORE_FLUSH)) { @@ -8608,7 +8609,7 @@ my_bool mysql_rm_tmp_tables(void) all not used tables. */ -void flush_tables() +void tdc_flush_unused_tables() { mysql_mutex_lock(&LOCK_open); while (unused_tables) @@ -8820,7 +8821,7 @@ tdc_wait_for_old_versions(THD *thd, MDL_request_list *mdl_requests, if ((share= get_cached_table_share(mdl_request->key.db_name(), mdl_request->key.name())) && - share->version != refresh_version) + share->needs_reopen()) break; } if (!mdl_request) |