mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
row0sel.c:
Fix a hang introduced in 4.0.5 in INSERT INTO ... SELECT ... when binlogging is not on innobase/row/row0sel.c: Fix a hang introduced in 4.0.5 in INSERT INTO ... SELECT ... when binlogging is not on
This commit is contained in:
parent
80b143c111
commit
9b515ad043
1 changed files with 10 additions and 2 deletions
|
@ -2702,14 +2702,22 @@ row_search_for_mysql(
|
|||
|
||||
unique_search_from_clust_index = TRUE;
|
||||
|
||||
if (prebuilt->select_lock_type == LOCK_NONE
|
||||
if (trx->mysql_n_tables_locked == 0
|
||||
&& prebuilt->select_lock_type == LOCK_NONE
|
||||
&& trx->isolation_level > TRX_ISO_READ_UNCOMMITTED
|
||||
&& trx->read_view) {
|
||||
|
||||
/* This is a SELECT query done as a consistent read,
|
||||
and the read view has already been allocated:
|
||||
let us try a search shortcut through the hash
|
||||
index */
|
||||
index.
|
||||
NOTE that we must also test that
|
||||
mysql_n_tables_locked == 0, because this might
|
||||
also be INSERT INTO ... SELECT ... or
|
||||
CREATE TABLE ... SELECT ... . Our algorithm is
|
||||
NOT prepared to inserts interleaved with the SELECT,
|
||||
and if we try that, we can deadlock on the adaptive
|
||||
hash index semaphore! */
|
||||
|
||||
if (btr_search_latch.writer != RW_LOCK_NOT_LOCKED) {
|
||||
/* There is an x-latch request: release
|
||||
|
|
Loading…
Reference in a new issue