diff options
-rw-r--r-- | sql/table.cc | 13 | ||||
-rw-r--r-- | sql/table_cache.cc | 54 | ||||
-rw-r--r-- | sql/table_cache.h | 1 |
3 files changed, 12 insertions, 56 deletions
diff --git a/sql/table.cc b/sql/table.cc index 28731c258eb..98421ec2aac 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -63,6 +63,8 @@ LEX_STRING SLOW_LOG_NAME= {C_STRING_WITH_LEN("slow_log")}; */ LEX_STRING parse_vcol_keyword= { C_STRING_WITH_LEN("PARSE_VCOL_EXPR ") }; +static int64 last_table_id; + /* Functions defined in this file */ static void fix_type_pointers(const char ***array, TYPELIB *point_to_type, @@ -327,7 +329,16 @@ TABLE_SHARE *alloc_table_share(const char *db, const char *table_name, &share->LOCK_share, MY_MUTEX_INIT_SLOW); mysql_mutex_init(key_TABLE_SHARE_LOCK_ha_data, &share->LOCK_ha_data, MY_MUTEX_INIT_FAST); - tdc_assign_new_table_id(share); + + /* + There is one reserved number that cannot be used. Remember to + change this when 6-byte global table id's are introduced. + */ + do + { + share->table_map_id= my_atomic_add64_explicit(&last_table_id, 1, + MY_MEMORY_ORDER_RELAXED); + } while (unlikely(share->table_map_id == ~0UL)); } DBUG_RETURN(share); } diff --git a/sql/table_cache.cc b/sql/table_cache.cc index 2dd368a1945..19e8250f99d 100644 --- a/sql/table_cache.cc +++ b/sql/table_cache.cc @@ -67,7 +67,6 @@ I_P_List <TDC_element, I_P_List_fast_push_back<TDC_element> > unused_shares; static int64 tdc_version; /* Increments on each reload */ -static int64 last_table_id; static bool tdc_inited; static int32 tc_count; /**< Number of TABLE objects in table cache. */ @@ -1091,56 +1090,3 @@ int tdc_iterate(THD *thd, my_hash_walk_action action, void *argument, } return res; } - - -/* - Function to assign a new table map id to a table share. - - PARAMETERS - - share - Pointer to table share structure - - DESCRIPTION - - We are intentionally not checking that share->mutex is locked - since this function should only be called when opening a table - share and before it is entered into the table definition cache - (meaning that it cannot be fetched by another thread, even - accidentally). - - PRE-CONDITION(S) - - share is non-NULL - last_table_id_lock initialized (tdc_inited) - - POST-CONDITION(S) - - share->table_map_id is given a value that with a high certainty is - not used by any other table (the only case where a table id can be - reused is on wrap-around, which means more than 4 billion table - share opens have been executed while one table was open all the - time). - - share->table_map_id is not ~0UL. -*/ - -void tdc_assign_new_table_id(TABLE_SHARE *share) -{ - ulong tid; - DBUG_ENTER("assign_new_table_id"); - DBUG_ASSERT(share); - DBUG_ASSERT(tdc_inited); - - /* - There is one reserved number that cannot be used. Remember to - change this when 6-byte global table id's are introduced. - */ - do - { - tid= my_atomic_add64_explicit(&last_table_id, 1, MY_MEMORY_ORDER_RELAXED); - } while (unlikely(tid == ~0UL)); - - share->table_map_id= tid; - DBUG_PRINT("info", ("table_id= %lu", share->table_map_id)); - DBUG_VOID_RETURN; -} diff --git a/sql/table_cache.h b/sql/table_cache.h index 2c5b0fc45a2..2d505d3c92a 100644 --- a/sql/table_cache.h +++ b/sql/table_cache.h @@ -220,7 +220,6 @@ extern int tdc_wait_for_old_version(THD *thd, const char *db, ulong refresh_version= ULONG_MAX); extern ulong tdc_refresh_version(void); extern ulong tdc_increment_refresh_version(void); -extern void tdc_assign_new_table_id(TABLE_SHARE *share); extern int tdc_iterate(THD *thd, my_hash_walk_action action, void *argument, bool no_dups= false); |