Commit 801f8643 authored by serg@sergbook.mysql.com's avatar serg@sergbook.mysql.com
Browse files

"repair ... use_frm" crash fixed

parent 6052c856
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -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",