1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

row0mysql.c, sql_db.cc:

Try to make sure DROP DATABASE does not cause a deadlock because we now let InnoDB wait MySQL does not have open handles to tables we drop


sql/sql_db.cc:
  Try to make sure DROP DATABASE does not cause a deadlock because we now let InnoDB wait MySQL does not have open handles to tables we drop
innobase/row/row0mysql.c:
  Try to make sure DROP DATABASE does not cause a deadlock because we now let InnoDB wait MySQL does not have open handles to tables we drop
This commit is contained in:
unknown
2002-02-14 03:45:45 +02:00
parent 01f1db421f
commit 5c08b0fbab
2 changed files with 25 additions and 3 deletions

View File

@ -1802,6 +1802,7 @@ row_drop_database_for_mysql(
char* name, /* in: database name which ends to '/' */
trx_t* trx) /* in: transaction handle */
{
dict_table_t* table;
char* table_name;
int err = DB_SUCCESS;
@ -1812,12 +1813,27 @@ row_drop_database_for_mysql(
trx->op_info = "dropping database";
trx_start_if_not_started(trx);
loop:
mutex_enter(&(dict_sys->mutex));
while (table_name = dict_get_first_table_name_in_db(name)) {
ut_a(memcmp(table_name, name, strlen(name)) == 0);
table = dict_table_get_low(table_name);
ut_a(table);
/* Wait until MySQL does not have any queries running on
the table */
if (table->n_mysql_handles_opened > 0) {
mutex_exit(&(dict_sys->mutex));
os_thread_sleep(100000);
goto loop;
}
err = row_drop_table_for_mysql(table_name, trx, TRUE);
mem_free(table_name);