mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
ha_innodb.cc:
Merge from 4.0: Fix a theoretical hang over the adaptive hash latch in InnoDB if one runs INSERT ... SELECT ... (binlog not enabled), or a multi-table UPDATE or DELETE, and only the read tables are InnoDB type, the rest are MyISAM; this also fixes bug #7879 for InnoDB type tables
This commit is contained in:
parent
fca5ee0c63
commit
21666e4207
1 changed files with 7 additions and 2 deletions
|
@ -5265,7 +5265,9 @@ ha_innobase::store_lock(
|
|||
if ((lock_type == TL_READ && thd->in_lock_tables) ||
|
||||
(lock_type == TL_READ_HIGH_PRIORITY && thd->in_lock_tables) ||
|
||||
lock_type == TL_READ_WITH_SHARED_LOCKS ||
|
||||
lock_type == TL_READ_NO_INSERT) {
|
||||
lock_type == TL_READ_NO_INSERT ||
|
||||
thd->lex->sql_command != SQLCOM_SELECT) {
|
||||
|
||||
/* The OR cases above are in this order:
|
||||
1) MySQL is doing LOCK TABLES ... READ LOCAL, or
|
||||
2) (we do not know when TL_READ_HIGH_PRIORITY is used), or
|
||||
|
@ -5273,7 +5275,10 @@ ha_innobase::store_lock(
|
|||
4) we are doing a complex SQL statement like
|
||||
INSERT INTO ... SELECT ... and the logical logging (MySQL
|
||||
binlog) requires the use of a locking read, or
|
||||
MySQL is doing LOCK TABLES ... READ. */
|
||||
MySQL is doing LOCK TABLES ... READ.
|
||||
5) we let InnoDB do locking reads for all SQL statements that
|
||||
are not simple SELECTs; note that select_lock_type in this
|
||||
case may get strengthened in ::external_lock() to LOCK_X. */
|
||||
|
||||
prebuilt->select_lock_type = LOCK_S;
|
||||
prebuilt->stored_select_lock_type = LOCK_S;
|
||||
|
|
Loading…
Reference in a new issue