summaryrefslogtreecommitdiff
path: root/sql/sql_table.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r--sql/sql_table.cc10
1 files changed, 3 insertions, 7 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 7138c82d891..f2b267eadb1 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -6959,7 +6959,6 @@ view_err:
table->alias.c_ptr());
}
- VOID(pthread_mutex_lock(&LOCK_open));
/*
Unlike to the above case close_cached_table() below will remove ALL
instances of TABLE from table cache (it will also remove table lock
@@ -6977,15 +6976,10 @@ view_err:
Workaround InnoDB ending the transaction when the table instance
is unlocked/closed (close_cached_table below), otherwise the trx
state will differ between the server and storage engine layers.
-
- We have to unlock LOCK_open here as otherwise we can get deadlock
- in wait_if_global_readlock(). This is still safe as we have a
- name lock on the table object.
*/
- VOID(pthread_mutex_unlock(&LOCK_open));
ha_autocommit_or_rollback(thd, 0);
- VOID(pthread_mutex_lock(&LOCK_open));
+ VOID(pthread_mutex_lock(&LOCK_open));
/*
Then do a 'simple' rename of the table. First we need to close all
instances of 'source' table.
@@ -7018,6 +7012,8 @@ view_err:
}
}
}
+ else
+ VOID(pthread_mutex_lock(&LOCK_open));
if (error == HA_ERR_WRONG_COMMAND)
{