diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index dcbfd709f97c509179b10cd73742fe70494d2887..4316acfa47d8668e765aeb15db2ec6ef8d9ec1f9 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -934,20 +934,19 @@ static int prepare_for_repair(THD* thd, TABLE_LIST* table,
   else
   {
 
-    char from[FN_REFLEN],to[FN_REFLEN];
+    char from[FN_REFLEN],tmp[FN_REFLEN];
     char* db = thd->db ? thd->db : table->db;
 
     sprintf(from, "%s/%s/%s", mysql_real_data_home, db, table->name);
     fn_format(from, from, "", MI_NAME_DEXT, 4);
-    sprintf(to,"%s-%lx_%lx", from, current_pid, thd->thread_id);
+    sprintf(tmp,"%s-%lx_%lx", from, current_pid, thd->thread_id);
 
-
-    my_rename(to, from, MYF(MY_WME));
+    close_cached_table(thd,table->table);
 
     if (lock_and_wait_for_table_name(thd,table))
       DBUG_RETURN(-1);
 
-    if (my_rename(from, to, MYF(MY_WME)))
+    if (my_rename(from, tmp, MYF(MY_WME)))
     {
       unlock_table_name(thd, table);
       DBUG_RETURN(send_check_errmsg(thd, table, "repair",
@@ -959,7 +958,7 @@ static int prepare_for_repair(THD* thd, TABLE_LIST* table,
       DBUG_RETURN(send_check_errmsg(thd, table, "repair",
 				    "Failed generating table from .frm file"));
     }
-    if (my_rename(to, from, MYF(MY_WME)))
+    if (my_rename(tmp, from, MYF(MY_WME)))
     {
       unlock_table_name(thd, table);
       DBUG_RETURN(send_check_errmsg(thd, table, "repair",