summaryrefslogtreecommitdiff
path: root/sql/sql_handler.cc
diff options
context:
space:
mode:
authorSergey Vojtovich <svoj@mariadb.org>2016-05-06 13:44:07 +0400
committerSergey Vojtovich <svoj@mariadb.org>2016-10-13 14:25:19 +0400
commitc90bd38809582b27696a68058fbd57c57d6dbf6d (patch)
treeda5752b58b44908cc1cfa1092b100dd99153267a /sql/sql_handler.cc
parent5058ced5df7a4ee3ff011577829fb2e4a6f47843 (diff)
downloadmariadb-git-bb-10.2-mdev7660.tar.gz
MDEV-7660 - MySQL WL#6671 "Improve scalability by not using thr_lock.c locksbb-10.2-mdev7660
for InnoDB tables" Don't use thr_lock.c locks for InnoDB tables. Let HANDLER READ call external_lock() even if SE is not going to be locked by THR_LOCK. This fixes at least main.implicit_commit failure. Removed tests for BUG#45143 and BUG#55930 which cover InnoDB + THR_LOCK. To operate properly these tests require code flow to go through THR_LOCK debug sync points, which is not the case after this patch. These tests are removed by WL#6671 as well. An alternative is to port them to different storage engine.
Diffstat (limited to 'sql/sql_handler.cc')
-rw-r--r--sql/sql_handler.cc7
1 files changed, 4 insertions, 3 deletions
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index 95417c73c74..405e7ce8c38 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -282,7 +282,7 @@ bool mysql_ha_open(THD *thd, TABLE_LIST *tables, SQL_HANDLER *reopen)
back-off for such locks.
*/
tables->mdl_request.init(MDL_key::TABLE, tables->db, tables->table_name,
- MDL_SHARED, MDL_TRANSACTION);
+ MDL_SHARED_READ, MDL_TRANSACTION);
mdl_savepoint= thd->mdl_context.mdl_savepoint();
/* for now HANDLER can be used only for real TABLES */
@@ -750,11 +750,12 @@ retry:
tables->table= table; // This is used by fix_fields
table->pos_in_table_list= tables;
- if (handler->lock->lock_count > 0)
+ if (handler->lock->table_count > 0)
{
int lock_error;
- handler->lock->locks[0]->type= handler->lock->locks[0]->org_type;
+ if (handler->lock->lock_count > 0)
+ handler->lock->locks[0]->type= handler->lock->locks[0]->org_type;
/* save open_tables state */
TABLE* backup_open_tables= thd->open_tables;