mirror of
https://github.com/MariaDB/server.git
synced 2025-04-12 18:25:38 +02:00
MDEV-23897 SIGSEGV on commit with innodb_lock_schedule_algorithm=VATS
This regression for debug builds was introduced by
MDEV-23101 (commit 224c950462
).
Due to MDEV-16664, the parameter
innodb_lock_schedule_algorithm=VATS
is not enabled by default.
The purpose of the added assertions was to enforce the invariant that
Galera replication cannot be enabled together with VATS due to MDEV-12837.
However, upon closer inspection, it is obvious that the variable 'lock'
may be assigned to the null pointer if no match is found in the
previous->hash list.
lock_grant_and_move_on_page(), lock_grant_and_move_on_rec():
Assert !lock->trx->is_wsrep() only after ensuring that lock
is not a null pointer.
This commit is contained in:
parent
2b832151ad
commit
1595189250
2 changed files with 8 additions and 4 deletions
5
mysql-test/suite/innodb/t/update-cascade.combinations
Normal file
5
mysql-test/suite/innodb/t/update-cascade.combinations
Normal file
|
@ -0,0 +1,5 @@
|
|||
[FCFS]
|
||||
--innodb-lock-schedule-algorithm=FCFS
|
||||
|
||||
[VATS]
|
||||
--innodb-lock-schedule-algorithm=VATS
|
|
@ -2306,12 +2306,12 @@ lock_grant_and_move_on_page(ulint rec_fold, ulint space, ulint page_no)
|
|||
lock = previous->hash;
|
||||
}
|
||||
|
||||
ut_ad(!lock->trx->is_wsrep());
|
||||
ut_ad(previous->hash == lock || previous == lock);
|
||||
/* Grant locks if there are no conflicting locks ahead.
|
||||
Move granted locks to the head of the list. */
|
||||
while (lock) {
|
||||
/* If the lock is a wait lock on this page, and it does not need to wait. */
|
||||
ut_ad(!lock->trx->is_wsrep());
|
||||
if (lock_get_wait(lock)
|
||||
&& lock->un_member.rec_lock.space == space
|
||||
&& lock->un_member.rec_lock.page_no == page_no
|
||||
|
@ -4211,11 +4211,10 @@ lock_grant_and_move_on_rec(
|
|||
}
|
||||
lock = previous->hash;
|
||||
}
|
||||
ut_ad(!lock->trx->is_wsrep());
|
||||
/* Grant locks if there are no conflicting locks ahead.
|
||||
Move granted locks to the head of the list. */
|
||||
for (;lock != NULL;) {
|
||||
|
||||
while (lock) {
|
||||
ut_ad(!lock->trx->is_wsrep());
|
||||
/* If the lock is a wait lock on this page, and it does not need to wait. */
|
||||
if (lock->un_member.rec_lock.space == space
|
||||
&& lock->un_member.rec_lock.page_no == page_no
|
||||
|
|
Loading…
Add table
Reference in a new issue