Commit 2c381d8
committed
MDEV-17843 Assertion `page_rec_is_leaf(rec)' failed in lock_rec_queue_validate upon SHOW ENGINE INNODB STATUS
lock_validate() accumulates page ids under locked lock_sys->mutex, then releases the latch, and invokes lock_rec_block_validate() for each page. Some other thread has ability to add/remove locks and change pages between releasing the latch in lock_validate() and acquiring it in lock_rec_validate_page(). lock_rec_validate_page() can invoke lock_rec_queue_validate() for non-locked supremum, what can cause ut_ad(page_rec_is_leaf(rec)) failure in lock_rec_queue_validate(). The fix is to invoke lock_rec_queue_validate() only for locked records in lock_rec_validate_page(). The error message in lock_rec_block_validate() is not necessary as BUF_GET_POSSIBLY_FREED mode is used to get block from buffer pool, and this is not error if a block was evicted. The test case would require new debug sync point. I think it's not necessary as the fixed code is debug-only.1 parent 9614fde commit 2c381d8
1 file changed
+10
-17
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5050 | 5050 | | |
5051 | 5051 | | |
5052 | 5052 | | |
5053 | | - | |
5054 | | - | |
5055 | | - | |
| 5053 | + | |
| 5054 | + | |
5056 | 5055 | | |
5057 | 5056 | | |
5058 | 5057 | | |
5059 | | - | |
5060 | | - | |
5061 | | - | |
5062 | | - | |
5063 | | - | |
| 5058 | + | |
5064 | 5059 | | |
5065 | 5060 | | |
5066 | 5061 | | |
5067 | 5062 | | |
5068 | 5063 | | |
5069 | 5064 | | |
5070 | | - | |
5071 | | - | |
| 5065 | + | |
| 5066 | + | |
| 5067 | + | |
| 5068 | + | |
| 5069 | + | |
| 5070 | + | |
| 5071 | + | |
5072 | 5072 | | |
5073 | 5073 | | |
5074 | 5074 | | |
| |||
5161 | 5161 | | |
5162 | 5162 | | |
5163 | 5163 | | |
5164 | | - | |
5165 | | - | |
5166 | | - | |
5167 | | - | |
5168 | | - | |
5169 | | - | |
5170 | | - | |
5171 | 5164 | | |
5172 | 5165 | | |
5173 | 5166 | | |
| |||
0 commit comments