Commit e74c9b71 authored by Marko Mäkelä's avatar Marko Mäkelä

Fix a mistake in the Bug#12861864 fix.

row_drop_table_for_mysql(): Really flag the indexes unavailable before
starting to drop the table.
parent 1bd0c9b5
...@@ -3220,6 +3220,18 @@ row_drop_table_for_mysql( ...@@ -3220,6 +3220,18 @@ row_drop_table_for_mysql(
trx_set_dict_operation(trx, TRX_DICT_OP_TABLE); trx_set_dict_operation(trx, TRX_DICT_OP_TABLE);
trx->table_id = table->id; trx->table_id = table->id;
/* Mark all indexes unavailable in the data dictionary cache
before starting to drop the table. */
for (index = dict_table_get_first_index(table);
index != NULL;
index = dict_table_get_next_index(index)) {
rw_lock_x_lock(dict_index_get_lock(index));
ut_ad(!index->to_be_dropped);
index->to_be_dropped = TRUE;
rw_lock_x_unlock(dict_index_get_lock(index));
}
/* We use the private SQL parser of Innobase to generate the /* We use the private SQL parser of Innobase to generate the
query graphs needed in deleting the dictionary data from system query graphs needed in deleting the dictionary data from system
tables in Innobase. Deleting a row from SYS_INDEXES table also tables in Innobase. Deleting a row from SYS_INDEXES table also
...@@ -3306,18 +3318,6 @@ row_drop_table_for_mysql( ...@@ -3306,18 +3318,6 @@ row_drop_table_for_mysql(
"END;\n" "END;\n"
, FALSE, trx); , FALSE, trx);
/* Mark all indexes unavailable in the data dictionary cache
before starting to drop the table. */
for (index = dict_table_get_first_index(table);
index != NULL;
index = dict_table_get_next_index(index)) {
rw_lock_x_lock(dict_index_get_lock(index));
ut_ad(!index->to_be_dropped);
index->to_be_dropped = TRUE;
rw_lock_x_unlock(dict_index_get_lock(index));
}
switch (err) { switch (err) {
ibool is_temp; ibool is_temp;
const char* name_or_path; const char* name_or_path;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment