Commit 035b06b4 authored by unknown's avatar unknown

BUG#28838 - duplicate external_lock in mysql_alter_table

Removed duplicate call to handler::external_lock() when
ALTER TABLE that doesn't need to copy a table (quick
ALTER TABLE) was executed.

Also quick ALTER TABLE doesn't hold LOCK_open anymore when
it enables/disables indexes.


sql/sql_table.cc:
  Do not call handler::external_lock() as table is already locked
  by open_ltable().
  
  Also do not hold LOCK_open mutex for alter_table_manage_keys() as
  this function doesn't require LOCK_open (LOCK_open is required by
  wait_while_table_is_used() only).
parent 7dc85356
......@@ -3789,11 +3789,9 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
{
VOID(pthread_mutex_lock(&LOCK_open));
wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN);
table->file->external_lock(thd, F_WRLCK);
VOID(pthread_mutex_unlock(&LOCK_open));
alter_table_manage_keys(table, table->file->indexes_are_disabled(),
alter_info->keys_onoff);
table->file->external_lock(thd, F_UNLCK);
VOID(pthread_mutex_unlock(&LOCK_open));
error= ha_commit_stmt(thd);
if (ha_commit(thd))
error= 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment