diff options
Diffstat (limited to 'innobase/row/row0mysql.c')
-rw-r--r-- | innobase/row/row0mysql.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c index 45c59ff2c38..8357ebe7b96 100644 --- a/innobase/row/row0mysql.c +++ b/innobase/row/row0mysql.c @@ -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)); @@ -1466,6 +1464,13 @@ loop: 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); @@ -1475,10 +1480,16 @@ loop: 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); @@ -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; |