Commit 0fa698dd authored by unknown's avatar unknown
Browse files

Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-5.0-maint

into  mysql.com:/usr/home/ram/work/bug21587/my50-bug21587


sql/mysql_priv.h:
  Auto merged
parents 5a0b54fd 838b5378
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -941,6 +941,7 @@ bool mysql_ha_read(THD *, TABLE_LIST *,enum enum_ha_read_modes,char *,
                   List<Item> *,enum ha_rkey_function,Item *,ha_rows,ha_rows);
int mysql_ha_flush(THD *thd, TABLE_LIST *tables, uint mode_flags,
                   bool is_locked);
void mysql_ha_mark_tables_for_reopen(THD *thd, TABLE *table);
/* mysql_ha_flush mode_flags bits */
#define MYSQL_HA_CLOSE_FINAL        0x00
#define MYSQL_HA_REOPEN_ON_USAGE    0x01
+9 −1
Original line number Diff line number Diff line
@@ -519,6 +519,14 @@ void close_thread_tables(THD *thd, bool lock_in_use, bool skip_derived)

  DBUG_PRINT("info", ("thd->open_tables: %p", thd->open_tables));

  
  /* 
    End open index scans and table scans and remove references to the tables 
    from the handler tables hash. After this preparation it is safe to close 
    the tables.
  */
  mysql_ha_mark_tables_for_reopen(thd, thd->open_tables);

  found_old_table= 0;
  while (thd->open_tables)
    found_old_table|=close_thread_table(thd, &thd->open_tables);
+38 −0
Original line number Diff line number Diff line
@@ -748,3 +748,41 @@ static int mysql_ha_flush_table(THD *thd, TABLE **table_ptr, uint mode_flags)

  DBUG_RETURN(0);
}


/*
  Mark tables for reopen.

  SYNOPSIS
    mysql_ha_mark_tables_for_reopen()
    thd                         Thread identifier.
    table                       Table list to mark for reopen.

  DESCRIPTION
    For each table found in the handler hash mark it as closed
    (ready for reopen) and end all index/table scans.

  NOTE
    The caller must lock LOCK_open.
*/

void mysql_ha_mark_tables_for_reopen(THD *thd, TABLE *table)
{
  DBUG_ENTER("mysql_ha_mark_tables_for_reopen");

  safe_mutex_assert_owner(&LOCK_open);
  for (; table; table= table->next)
  {
    TABLE_LIST *hash_tables;
    if ((hash_tables= (TABLE_LIST*) hash_search(&thd->handler_tables_hash,
                                                (byte*) table->alias,
                                                strlen(table->alias) + 1)))
    {
      /* Mark table as ready for reopen. */
      hash_tables->table= NULL;
      /* End open index/table scans. */
      table->file->ha_index_or_rnd_end();
    }
  }
  DBUG_VOID_RETURN;
}