diff options
author | Dmitry Shulga <Dmitry.Shulga@oracle.com> | 2010-12-10 17:32:58 +0600 |
---|---|---|
committer | Dmitry Shulga <Dmitry.Shulga@oracle.com> | 2010-12-10 17:32:58 +0600 |
commit | 54fb1f59185cfd343b842ce13f1db0538ee21596 (patch) | |
tree | e4227664535e2d54d767b35bf69552b7d19a1b71 /sql/sql_db.cc | |
parent | e3df7c2bfb09f065a53c934796cbe0205febd7f0 (diff) | |
parent | dfb622726a7230b00886a183e4189671c27d5dd3 (diff) | |
download | mariadb-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.cc | 22 |
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; |