summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <heikki@hundin.mysql.fi>2002-07-15 15:47:53 +0300
committerunknown <heikki@hundin.mysql.fi>2002-07-15 15:47:53 +0300
commite21c05eb948d30f26df08380adef7ee733433d9b (patch)
tree37d634795f76f6cd463850c4b656bc684ffa69b4
parent15e3840eba4964f4e3ab9c7b986e147c1760e558 (diff)
downloadmariadb-git-e21c05eb948d30f26df08380adef7ee733433d9b.tar.gz
sql_db.cc:
Revert Monty's change to the positioning of ha_drop_database(): otherwise a running query on a table to be dropped in DROP DATABASE always causes the server to hang sql/sql_db.cc: Revert Monty's change to the positioning of ha_drop_database(): otherwise a running query on a table to be dropped in DROP DATABASE always causes the server to hang
-rw-r--r--sql/sql_db.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/sql/sql_db.cc b/sql/sql_db.cc
index 5ce1929e90a..a3829aae073 100644
--- a/sql/sql_db.cc
+++ b/sql/sql_db.cc
@@ -166,7 +166,6 @@ void mysql_rm_db(THD *thd,char *db,bool if_exists)
if ((deleted=mysql_rm_known_files(thd, dirp, path,0)) >= 0)
{
- ha_drop_database(path);
if (!thd->query)
{
thd->query = path;
@@ -190,6 +189,17 @@ void mysql_rm_db(THD *thd,char *db,bool if_exists)
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;
}