mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 19:11:46 +01:00
Fix bug #57345
This commit is contained in:
parent
34c61d0448
commit
ebc8ba0bb2
3 changed files with 31 additions and 3 deletions
|
@ -3259,6 +3259,7 @@ row_search_for_mysql(
|
||||||
mem_heap_t* heap = NULL;
|
mem_heap_t* heap = NULL;
|
||||||
ulint offsets_[REC_OFFS_NORMAL_SIZE];
|
ulint offsets_[REC_OFFS_NORMAL_SIZE];
|
||||||
ulint* offsets = offsets_;
|
ulint* offsets = offsets_;
|
||||||
|
ibool table_lock_waited = FALSE;
|
||||||
|
|
||||||
*offsets_ = (sizeof offsets_) / sizeof *offsets_;
|
*offsets_ = (sizeof offsets_) / sizeof *offsets_;
|
||||||
|
|
||||||
|
@ -3622,13 +3623,15 @@ shortcut_fails_too_big_rec:
|
||||||
trx_assign_read_view(trx);
|
trx_assign_read_view(trx);
|
||||||
prebuilt->sql_stat_start = FALSE;
|
prebuilt->sql_stat_start = FALSE;
|
||||||
} else {
|
} else {
|
||||||
|
wait_table_again:
|
||||||
err = lock_table(0, index->table,
|
err = lock_table(0, index->table,
|
||||||
prebuilt->select_lock_type == LOCK_S
|
prebuilt->select_lock_type == LOCK_S
|
||||||
? LOCK_IS : LOCK_IX, thr);
|
? LOCK_IS : LOCK_IX, thr);
|
||||||
|
|
||||||
if (err != DB_SUCCESS) {
|
if (err != DB_SUCCESS) {
|
||||||
|
|
||||||
goto lock_wait_or_error;
|
table_lock_waited = TRUE;
|
||||||
|
goto lock_table_wait;
|
||||||
}
|
}
|
||||||
prebuilt->sql_stat_start = FALSE;
|
prebuilt->sql_stat_start = FALSE;
|
||||||
}
|
}
|
||||||
|
@ -4408,6 +4411,7 @@ lock_wait_or_error:
|
||||||
|
|
||||||
btr_pcur_store_position(pcur, &mtr);
|
btr_pcur_store_position(pcur, &mtr);
|
||||||
|
|
||||||
|
lock_table_wait:
|
||||||
mtr_commit(&mtr);
|
mtr_commit(&mtr);
|
||||||
mtr_has_extra_clust_latch = FALSE;
|
mtr_has_extra_clust_latch = FALSE;
|
||||||
|
|
||||||
|
@ -4425,6 +4429,14 @@ lock_wait_or_error:
|
||||||
thr->lock_state = QUE_THR_LOCK_NOLOCK;
|
thr->lock_state = QUE_THR_LOCK_NOLOCK;
|
||||||
mtr_start(&mtr);
|
mtr_start(&mtr);
|
||||||
|
|
||||||
|
/* Table lock waited, go try to obtain table lock
|
||||||
|
again */
|
||||||
|
if (table_lock_waited) {
|
||||||
|
table_lock_waited = FALSE;
|
||||||
|
|
||||||
|
goto wait_table_again;
|
||||||
|
}
|
||||||
|
|
||||||
sel_restore_position_for_mysql(&same_user_rec,
|
sel_restore_position_for_mysql(&same_user_rec,
|
||||||
BTR_SEARCH_LEAF, pcur,
|
BTR_SEARCH_LEAF, pcur,
|
||||||
moves_up, &mtr);
|
moves_up, &mtr);
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2010-10-11 The InnoDB Team
|
||||||
|
* row/row0sel.c
|
||||||
|
Fix Bug #57345 btr_pcur_store_position abort for load with
|
||||||
|
concurrent lock/unlock tables
|
||||||
|
|
||||||
2010-10-06 The InnoDB Team
|
2010-10-06 The InnoDB Team
|
||||||
* row/row0mysql.c, innodb_bug57255.result, innodb_bug57255.test
|
* row/row0mysql.c, innodb_bug57255.result, innodb_bug57255.test
|
||||||
Fix Bug #Cascade Delete results in "Got error -1 from storage engine"
|
Fix Bug #Cascade Delete results in "Got error -1 from storage engine"
|
||||||
|
@ -40,7 +45,6 @@
|
||||||
* handler/ha_innodb.cc
|
* handler/ha_innodb.cc
|
||||||
Fix Bug #55382 Assignment with SELECT expressions takes unexpected
|
Fix Bug #55382 Assignment with SELECT expressions takes unexpected
|
||||||
S locks in READ COMMITTED
|
S locks in READ COMMITTED
|
||||||
>>>>>>> MERGE-SOURCE
|
|
||||||
|
|
||||||
2010-07-27 The InnoDB Team
|
2010-07-27 The InnoDB Team
|
||||||
|
|
||||||
|
|
|
@ -3356,6 +3356,7 @@ row_search_for_mysql(
|
||||||
mem_heap_t* heap = NULL;
|
mem_heap_t* heap = NULL;
|
||||||
ulint offsets_[REC_OFFS_NORMAL_SIZE];
|
ulint offsets_[REC_OFFS_NORMAL_SIZE];
|
||||||
ulint* offsets = offsets_;
|
ulint* offsets = offsets_;
|
||||||
|
ibool table_lock_waited = FALSE;
|
||||||
|
|
||||||
rec_offs_init(offsets_);
|
rec_offs_init(offsets_);
|
||||||
|
|
||||||
|
@ -3742,13 +3743,15 @@ release_search_latch_if_needed:
|
||||||
trx_assign_read_view(trx);
|
trx_assign_read_view(trx);
|
||||||
prebuilt->sql_stat_start = FALSE;
|
prebuilt->sql_stat_start = FALSE;
|
||||||
} else {
|
} else {
|
||||||
|
wait_table_again:
|
||||||
err = lock_table(0, index->table,
|
err = lock_table(0, index->table,
|
||||||
prebuilt->select_lock_type == LOCK_S
|
prebuilt->select_lock_type == LOCK_S
|
||||||
? LOCK_IS : LOCK_IX, thr);
|
? LOCK_IS : LOCK_IX, thr);
|
||||||
|
|
||||||
if (err != DB_SUCCESS) {
|
if (err != DB_SUCCESS) {
|
||||||
|
|
||||||
goto lock_wait_or_error;
|
table_lock_waited = TRUE;
|
||||||
|
goto lock_table_wait;
|
||||||
}
|
}
|
||||||
prebuilt->sql_stat_start = FALSE;
|
prebuilt->sql_stat_start = FALSE;
|
||||||
}
|
}
|
||||||
|
@ -4559,6 +4562,7 @@ lock_wait_or_error:
|
||||||
|
|
||||||
btr_pcur_store_position(pcur, &mtr);
|
btr_pcur_store_position(pcur, &mtr);
|
||||||
|
|
||||||
|
lock_table_wait:
|
||||||
mtr_commit(&mtr);
|
mtr_commit(&mtr);
|
||||||
mtr_has_extra_clust_latch = FALSE;
|
mtr_has_extra_clust_latch = FALSE;
|
||||||
|
|
||||||
|
@ -4576,6 +4580,14 @@ lock_wait_or_error:
|
||||||
thr->lock_state = QUE_THR_LOCK_NOLOCK;
|
thr->lock_state = QUE_THR_LOCK_NOLOCK;
|
||||||
mtr_start(&mtr);
|
mtr_start(&mtr);
|
||||||
|
|
||||||
|
/* Table lock waited, go try to obtain table lock
|
||||||
|
again */
|
||||||
|
if (table_lock_waited) {
|
||||||
|
table_lock_waited = FALSE;
|
||||||
|
|
||||||
|
goto wait_table_again;
|
||||||
|
}
|
||||||
|
|
||||||
sel_restore_position_for_mysql(&same_user_rec,
|
sel_restore_position_for_mysql(&same_user_rec,
|
||||||
BTR_SEARCH_LEAF, pcur,
|
BTR_SEARCH_LEAF, pcur,
|
||||||
moves_up, &mtr);
|
moves_up, &mtr);
|
||||||
|
|
Loading…
Add table
Reference in a new issue