Skip to content
Permalink
Browse files
MDEV-24054 Assertion in_LRU_list failed in buf_flush_try_neighbors()
buf_flush_try_neighbors(): Before invoking buf_page_t::ready_for_flush(),
check that the freshly looked up buf_pool.page_hash entry actually is
a buffer page and not a buf_pool.watch[] sentinel for purge buffering.

This race condition was introduced in MDEV-15053
(commit b1ab211).
It is rather hard to hit this bug, because
buf_flush_check_neighbors() already checked the condition.
The problem exists if buf_pool.watch_set() was invoked for
a page in the range after the check in buf_flush_check_neighbor()
had been finished.
  • Loading branch information
dr-m committed Oct 30, 2020
1 parent 03357de commit b0ff791
Showing 1 changed file with 2 additions and 1 deletion.
@@ -1106,7 +1106,8 @@ static ulint buf_flush_try_neighbors(fil_space_t *space,
because the flushed blocks are soon freed */
if (!lru || id == page_id || bpage->is_old())
{
if (bpage->ready_for_flush() && buf_flush_page(bpage, lru, space))
if (!buf_pool.watch_is_sentinel(*bpage) &&
bpage->ready_for_flush() && buf_flush_page(bpage, lru, space))
{
++count;
continue;

0 comments on commit b0ff791

Please sign in to comment.