1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

sql_db.cc:

On Monty's suggestion move ha_drop_database back inside LOCK_mysql_create_db, but we release LOCK_open during it to let possible running queries complete. I tested this and it seemed to work also in complex concurrent DELETE, SELECT, DROP DATABASE, and CREATE DATABASE situations


sql/sql_db.cc:
  On Monty's suggestion move ha_drop_database back inside LOCK_mysql_create_db, but we release LOCK_open during it to let possible running queries complete. I tested this and it seemed to work also in complex concurrent DELETE, SELECT, DROP DATABASE, and CREATE DATABASE situations
This commit is contained in:
unknown
2002-07-16 03:29:02 +03:00
parent 9e5fd21c3b
commit 335c58d1c2

View File

@@ -166,6 +166,15 @@ void mysql_rm_db(THD *thd,char *db,bool if_exists)
if ((deleted=mysql_rm_known_files(thd, dirp, path,0)) >= 0)
{
/* If there are running queries on the tables, MySQL needs to get
access to LOCK_open to end them. InnoDB on the other hand waits
for the queries to end before dropping the database. That is why we
must do the dropping with LOCK_open released. */
VOID(pthread_mutex_unlock(&LOCK_open));
ha_drop_database(path);
VOID(pthread_mutex_lock(&LOCK_open));
if (!thd->query)
{
thd->query = path;
@@ -190,16 +199,6 @@ exit:
VOID(pthread_mutex_unlock(&LOCK_open));
VOID(pthread_mutex_unlock(&LOCK_mysql_create_db));
/* If there are running queries on the tables, MySQL needs to get
access to LOCK_open to end them. InnoDB on the other hand waits
for the queries to end before dropping the database. That is why we
must do the dropping outside of the mutexes above, otherwise the server
always hangs if there are running queries. We only drop inside InnoDB
if deleted got value >= 0 which means that it was successful. */
if (deleted >= 0)
ha_drop_database(path);
DBUG_VOID_RETURN;
}