1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

Manual merge from mysql-5.5-bugfixing to mysql-5.5-runtime.

This commit is contained in:
Jon Olav Hauglid
2010-08-18 13:29:04 +02:00
235 changed files with 12924 additions and 2707 deletions

View File

@@ -8917,93 +8917,6 @@ bool is_equal(const LEX_STRING *a, const LEX_STRING *b)
}
/*
Unlock and close table before renaming and dropping partitions
SYNOPSIS
alter_close_tables()
lpt Struct carrying parameters
RETURN VALUES
0
*/
static int alter_close_tables(ALTER_PARTITION_PARAM_TYPE *lpt)
{
TABLE_SHARE *share= lpt->table->s;
THD *thd= lpt->thd;
TABLE *table;
DBUG_ENTER("alter_close_tables");
/*
We can safely remove locks for all tables with the same name:
later they will all be closed anyway in
alter_partition_lock_handling().
*/
for (table= thd->open_tables; table ; table= table->next)
{
if (!strcmp(table->s->table_name.str, share->table_name.str) &&
!strcmp(table->s->db.str, share->db.str))
{
/*
No need to take LOCK_thd_data to protect mysql_lock_remove(),
since mysql_lock_abort_for_thread() only aborts waiting
locks, and our lock is already granted.
*/
mysql_lock_remove(thd, thd->lock, table);
/*
Protect members of thd->open_tables concurrently used
in mysql_notify_thread_having_shared_lock().
*/
mysql_mutex_lock(&thd->LOCK_thd_data);
table->file->close();
table->db_stat= 0; // Mark file closed
mysql_mutex_unlock(&thd->LOCK_thd_data);
/*
Ensure that we won't end up with a crippled table instance
in the table cache if an error occurs before we reach
alter_partition_lock_handling() and the table is closed
by close_thread_tables() instead.
*/
tdc_remove_table(thd, TDC_RT_REMOVE_UNUSED,
table->s->db.str,
table->s->table_name.str,
FALSE);
}
}
DBUG_RETURN(0);
}
/*
SYNOPSIS
abort_and_upgrade_lock_and_close_table()
lpt Parameter passing struct
All parameters passed through the ALTER_PARTITION_PARAM_TYPE object
RETURN VALUE
0
DESCRIPTION
Remember old lock level (for possible downgrade later on), abort all
waiting threads and ensure that all keeping locks currently are
completed such that we own the lock exclusively and no other interaction
is ongoing. Close the table and hold the name lock.
thd Thread object
table Table object
db Database name
table_name Table name
old_lock_level Old lock level
*/
int abort_and_upgrade_lock_and_close_table(ALTER_PARTITION_PARAM_TYPE *lpt)
{
DBUG_ENTER("abort_and_upgrade_lock_and_close_table");
if (wait_while_table_is_used(lpt->thd, lpt->table, HA_EXTRA_FORCE_REOPEN))
DBUG_RETURN(1);
if (alter_close_tables(lpt))
DBUG_RETURN(1);
DBUG_RETURN(0);
}
/*
Tells if two (or more) tables have auto_increment columns and we want to
lock those tables with a write lock.