Commit 49891223 authored by tsmith@ramayana.hindu.god's avatar tsmith@ramayana.hindu.god
Browse files

Bug #29474: 21587 Regression Ever increasing open tables/fd when using HANDLER READ + DELETE

Revert the fix for bug 21587.  That bug will be re-opened, and a new
fix must be created.
parent 5e926bc1
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -995,7 +995,6 @@ 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
+0 −8
Original line number Diff line number Diff line
@@ -585,14 +585,6 @@ 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);
+0 −45
Original line number Diff line number Diff line
@@ -746,48 +746,3 @@ 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)
  {
    /*
      Some elements in open table list, for example placeholders used for
      name-locking, can have alias set to 0.
    */
    if (table->alias)
    {
      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;
}