Commit 80b9ee66 authored by Dmitry Shulga's avatar Dmitry Shulga

Manual merge from mysql-5.1-bugteam for bug#54486.

parents 8b005d30 d3ea2409
...@@ -794,14 +794,9 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent) ...@@ -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, if (find_db_tables_and_rm_known_files(thd, dirp, db, path, &tables,
&found_other_files)) &found_other_files))
{
thd->pop_internal_handler();
goto exit; goto exit;
}
/* /*
Disable drop of enabled log tables, must be done before name locking. 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) ...@@ -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)) table->table_name_length, table->table_name, true))
{ {
my_error(ER_BAD_LOG_STATEMENT, MYF(0), "DROP"); my_error(ER_BAD_LOG_STATEMENT, MYF(0), "DROP");
thd->pop_internal_handler();
goto exit; goto exit;
} }
} }
...@@ -825,10 +819,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent) ...@@ -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, if (lock_table_names(thd, tables, NULL, thd->variables.lock_wait_timeout,
MYSQL_OPEN_SKIP_TEMPORARY) || MYSQL_OPEN_SKIP_TEMPORARY) ||
lock_db_routines(thd, db)) lock_db_routines(thd, db))
{
thd->pop_internal_handler();
goto exit; goto exit;
}
/* mysql_ha_rm_tables() requires a non-null TABLE_LIST. */ /* mysql_ha_rm_tables() requires a non-null TABLE_LIST. */
if (tables) if (tables)
...@@ -841,6 +832,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent) ...@@ -841,6 +832,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
deleted_tables++; deleted_tables++;
} }
thd->push_internal_handler(&err_handler);
if (thd->killed || if (thd->killed ||
(tables && mysql_rm_table_no_locks(thd, tables, true, false, true, true))) (tables && mysql_rm_table_no_locks(thd, tables, true, false, true, true)))
{ {
...@@ -1094,10 +1086,18 @@ static bool find_db_tables_and_rm_known_files(THD *thd, MY_DIR *dirp, ...@@ -1094,10 +1086,18 @@ static bool find_db_tables_and_rm_known_files(THD *thd, MY_DIR *dirp,
else else
{ {
strxmov(filePath, path, "/", file->name, NullS); strxmov(filePath, path, "/", file->name, NullS);
if (mysql_file_delete_with_symlink(key_file_misc, filePath, MYF(MY_WME))) /*
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); DBUG_RETURN(true);
} }
} }
}
*tables= tot_list; *tables= tot_list;
DBUG_RETURN(false); DBUG_RETURN(false);
} }
......
...@@ -1748,6 +1748,8 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info, ...@@ -1748,6 +1748,8 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info,
MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) || MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) ||
mi_open_datafile(info,share,name,-1)) mi_open_datafile(info,share,name,-1))
got_error=1; got_error=1;
param->retry_repair= 0;
} }
} }
if (got_error) if (got_error)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment