Loading innobase/dict/dict0dict.c +35 −15 Original line number Diff line number Diff line Loading @@ -195,21 +195,6 @@ dict_mutex_exit_for_mysql(void) mutex_exit(&(dict_sys->mutex)); } /************************************************************************ Increments the count of open MySQL handles to a table. */ void dict_table_increment_handle_count( /*==============================*/ dict_table_t* table) /* in: table */ { mutex_enter(&(dict_sys->mutex)); table->n_mysql_handles_opened++; mutex_exit(&(dict_sys->mutex)); } /************************************************************************ Decrements the count of open MySQL handles to a table. */ Loading Loading @@ -495,6 +480,41 @@ dict_table_get( return(table); } /************************************************************************** Returns a table object and increments MySQL open handle count on the table. */ dict_table_t* dict_table_get_and_increment_handle_count( /*======================================*/ /* out: table, NULL if does not exist */ char* table_name, /* in: table name */ trx_t* trx) /* in: transaction handle or NULL */ { dict_table_t* table; UT_NOT_USED(trx); mutex_enter(&(dict_sys->mutex)); table = dict_table_get_low(table_name); if (table != NULL) { table->n_mysql_handles_opened++; } mutex_exit(&(dict_sys->mutex)); if (table != NULL) { if (!table->stat_initialized) { dict_update_statistics(table); } } return(table); } /************************************************************************** Adds a table object to the dictionary cache. */ Loading innobase/include/dict0dict.h +10 −7 Original line number Diff line number Diff line Loading @@ -26,13 +26,6 @@ Created 1/8/1996 Heikki Tuuri #include "ut0byte.h" #include "trx0types.h" /************************************************************************ Increments the count of open MySQL handles to a table. */ void dict_table_increment_handle_count( /*==============================*/ dict_table_t* table); /* in: table */ /************************************************************************ Decrements the count of open MySQL handles to a table. */ Loading Loading @@ -195,6 +188,16 @@ dict_table_get( char* table_name, /* in: table name */ trx_t* trx); /* in: transaction handle */ /************************************************************************** Returns a table object and increments MySQL open handle count on the table. */ dict_table_t* dict_table_get_and_increment_handle_count( /*======================================*/ /* out: table, NULL if does not exist */ char* table_name, /* in: table name */ trx_t* trx); /* in: transaction handle or NULL */ /************************************************************************** Returns a table object, based on table id, and memoryfixes it. */ dict_table_t* Loading innobase/row/row0mysql.c +20 −2 Original line number Diff line number Diff line Loading @@ -273,8 +273,6 @@ row_create_prebuilt( ulint ref_len; ulint i; dict_table_increment_handle_count(table); heap = mem_heap_create(128); prebuilt = mem_heap_alloc(heap, sizeof(row_prebuilt_t)); Loading Loading @@ -1466,6 +1464,13 @@ row_drop_tables_for_mysql_in_background(void) table = dict_table_get_low(drop->table_name); mutex_exit(&(dict_sys->mutex)); if (table == NULL) { /* If for some reason the table has already been dropped through some other mechanism, do not try to drop it */ goto already_dropped; } if (table->n_mysql_handles_opened > 0) { return(n_tables + n_tables_dropped); Loading @@ -1475,10 +1480,16 @@ row_drop_tables_for_mysql_in_background(void) row_drop_table_for_mysql_in_background(drop->table_name); already_dropped: mutex_enter(&kernel_mutex); UT_LIST_REMOVE(row_mysql_drop_list, row_mysql_drop_list, drop); ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: Dropped table %s in background drop queue.\n", drop->table_name); mem_free(drop->table_name); mem_free(drop); Loading Loading @@ -1741,6 +1752,13 @@ row_drop_table_for_mysql( if (table->n_mysql_handles_opened > 0) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: Warning: MySQL is trying to drop table %s\n" "InnoDB: though there are still open handles to it.\n" "InnoDB: Adding the table to the background drop queue.\n", table->name); row_add_table_to_background_drop_list(table); err = DB_SUCCESS; Loading sql/ha_innobase.cc +4 −1 Original line number Diff line number Diff line Loading @@ -981,7 +981,10 @@ ha_innobase::open( /* Get pointer to a table object in InnoDB dictionary cache */ if (NULL == (ib_table = dict_table_get(norm_name, NULL))) { ib_table = dict_table_get_and_increment_handle_count( norm_name, NULL); if (NULL == ib_table) { fprintf(stderr, "InnoDB: Error: cannot find table %s from the internal data dictionary\n" Loading Loading
innobase/dict/dict0dict.c +35 −15 Original line number Diff line number Diff line Loading @@ -195,21 +195,6 @@ dict_mutex_exit_for_mysql(void) mutex_exit(&(dict_sys->mutex)); } /************************************************************************ Increments the count of open MySQL handles to a table. */ void dict_table_increment_handle_count( /*==============================*/ dict_table_t* table) /* in: table */ { mutex_enter(&(dict_sys->mutex)); table->n_mysql_handles_opened++; mutex_exit(&(dict_sys->mutex)); } /************************************************************************ Decrements the count of open MySQL handles to a table. */ Loading Loading @@ -495,6 +480,41 @@ dict_table_get( return(table); } /************************************************************************** Returns a table object and increments MySQL open handle count on the table. */ dict_table_t* dict_table_get_and_increment_handle_count( /*======================================*/ /* out: table, NULL if does not exist */ char* table_name, /* in: table name */ trx_t* trx) /* in: transaction handle or NULL */ { dict_table_t* table; UT_NOT_USED(trx); mutex_enter(&(dict_sys->mutex)); table = dict_table_get_low(table_name); if (table != NULL) { table->n_mysql_handles_opened++; } mutex_exit(&(dict_sys->mutex)); if (table != NULL) { if (!table->stat_initialized) { dict_update_statistics(table); } } return(table); } /************************************************************************** Adds a table object to the dictionary cache. */ Loading
innobase/include/dict0dict.h +10 −7 Original line number Diff line number Diff line Loading @@ -26,13 +26,6 @@ Created 1/8/1996 Heikki Tuuri #include "ut0byte.h" #include "trx0types.h" /************************************************************************ Increments the count of open MySQL handles to a table. */ void dict_table_increment_handle_count( /*==============================*/ dict_table_t* table); /* in: table */ /************************************************************************ Decrements the count of open MySQL handles to a table. */ Loading Loading @@ -195,6 +188,16 @@ dict_table_get( char* table_name, /* in: table name */ trx_t* trx); /* in: transaction handle */ /************************************************************************** Returns a table object and increments MySQL open handle count on the table. */ dict_table_t* dict_table_get_and_increment_handle_count( /*======================================*/ /* out: table, NULL if does not exist */ char* table_name, /* in: table name */ trx_t* trx); /* in: transaction handle or NULL */ /************************************************************************** Returns a table object, based on table id, and memoryfixes it. */ dict_table_t* Loading
innobase/row/row0mysql.c +20 −2 Original line number Diff line number Diff line Loading @@ -273,8 +273,6 @@ row_create_prebuilt( ulint ref_len; ulint i; dict_table_increment_handle_count(table); heap = mem_heap_create(128); prebuilt = mem_heap_alloc(heap, sizeof(row_prebuilt_t)); Loading Loading @@ -1466,6 +1464,13 @@ row_drop_tables_for_mysql_in_background(void) table = dict_table_get_low(drop->table_name); mutex_exit(&(dict_sys->mutex)); if (table == NULL) { /* If for some reason the table has already been dropped through some other mechanism, do not try to drop it */ goto already_dropped; } if (table->n_mysql_handles_opened > 0) { return(n_tables + n_tables_dropped); Loading @@ -1475,10 +1480,16 @@ row_drop_tables_for_mysql_in_background(void) row_drop_table_for_mysql_in_background(drop->table_name); already_dropped: mutex_enter(&kernel_mutex); UT_LIST_REMOVE(row_mysql_drop_list, row_mysql_drop_list, drop); ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: Dropped table %s in background drop queue.\n", drop->table_name); mem_free(drop->table_name); mem_free(drop); Loading Loading @@ -1741,6 +1752,13 @@ row_drop_table_for_mysql( if (table->n_mysql_handles_opened > 0) { ut_print_timestamp(stderr); fprintf(stderr, " InnoDB: Warning: MySQL is trying to drop table %s\n" "InnoDB: though there are still open handles to it.\n" "InnoDB: Adding the table to the background drop queue.\n", table->name); row_add_table_to_background_drop_list(table); err = DB_SUCCESS; Loading
sql/ha_innobase.cc +4 −1 Original line number Diff line number Diff line Loading @@ -981,7 +981,10 @@ ha_innobase::open( /* Get pointer to a table object in InnoDB dictionary cache */ if (NULL == (ib_table = dict_table_get(norm_name, NULL))) { ib_table = dict_table_get_and_increment_handle_count( norm_name, NULL); if (NULL == ib_table) { fprintf(stderr, "InnoDB: Error: cannot find table %s from the internal data dictionary\n" Loading