summaryrefslogtreecommitdiff
path: root/sql/sql_db.cc
diff options
context:
space:
mode:
authorDmitry Shulga <Dmitry.Shulga@oracle.com>2010-12-10 17:32:58 +0600
committerDmitry Shulga <Dmitry.Shulga@oracle.com>2010-12-10 17:32:58 +0600
commit54fb1f59185cfd343b842ce13f1db0538ee21596 (patch)
treee4227664535e2d54d767b35bf69552b7d19a1b71 /sql/sql_db.cc
parente3df7c2bfb09f065a53c934796cbe0205febd7f0 (diff)
parentdfb622726a7230b00886a183e4189671c27d5dd3 (diff)
downloadmariadb-git-54fb1f59185cfd343b842ce13f1db0538ee21596.tar.gz
Manual merge from mysql-5.1-bugteam for bug#54486.
Diffstat (limited to 'sql/sql_db.cc')
-rw-r--r--sql/sql_db.cc22
1 files changed, 11 insertions, 11 deletions
diff --git a/sql/sql_db.cc b/sql/sql_db.cc
index 292fbba2352..38f39ec0be7 100644
--- a/sql/sql_db.cc
+++ b/sql/sql_db.cc
@@ -794,14 +794,9 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
}
}
- thd->push_internal_handler(&err_handler);
-
if (find_db_tables_and_rm_known_files(thd, dirp, db, path, &tables,
&found_other_files))
- {
- thd->pop_internal_handler();
goto exit;
- }
/*
Disable drop of enabled log tables, must be done before name locking.
@@ -815,7 +810,6 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
table->table_name_length, table->table_name, true))
{
my_error(ER_BAD_LOG_STATEMENT, MYF(0), "DROP");
- thd->pop_internal_handler();
goto exit;
}
}
@@ -825,10 +819,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
if (lock_table_names(thd, tables, NULL, thd->variables.lock_wait_timeout,
MYSQL_OPEN_SKIP_TEMPORARY) ||
lock_db_routines(thd, db))
- {
- thd->pop_internal_handler();
goto exit;
- }
/* mysql_ha_rm_tables() requires a non-null TABLE_LIST. */
if (tables)
@@ -841,6 +832,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
deleted_tables++;
}
+ thd->push_internal_handler(&err_handler);
if (thd->killed ||
(tables && mysql_rm_table_no_locks(thd, tables, true, false, true, true)))
{
@@ -1094,8 +1086,16 @@ static bool find_db_tables_and_rm_known_files(THD *thd, MY_DIR *dirp,
else
{
strxmov(filePath, path, "/", file->name, NullS);
- if (mysql_file_delete_with_symlink(key_file_misc, filePath, MYF(MY_WME)))
- DBUG_RETURN(true);
+ /*
+ We ignore ENOENT error in order to skip files that was deleted
+ by concurrently running statement like REAPIR TABLE ...
+ */
+ if (my_delete_with_symlink(filePath, MYF(0)) &&
+ my_errno != ENOENT)
+ {
+ my_error(EE_DELETE, MYF(0), filePath, my_errno);
+ DBUG_RETURN(true);
+ }
}
}
*tables= tot_list;