Commit f168050e authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-34791 fixup: Avoid an infinite loop with ROW_FORMAT=COMPRESSED

buf_pool_t::page_fix(): If a change buffer merge may be needed on a
ROW_FORMAT=COMPRESSED page that exists in compressed-only format in
the buffer pool, go ahead to decompress the block. This fixes an
infinite loop.

Reviewed by: Debarun Banerjee
parent 09b1269e
......@@ -2608,7 +2608,10 @@ buf_block_t *buf_pool_t::page_fix(const page_id_t id,
return reinterpret_cast<buf_block_t*>(-1);
}
if (UNIV_UNLIKELY(!b->frame))
if (UNIV_LIKELY(b->frame != nullptr));
else if (state < buf_page_t::READ_FIX)
goto unzip;
else
{
wait_for_unzip:
b->unfix();
......@@ -2629,6 +2632,7 @@ buf_block_t *buf_pool_t::page_fix(const page_id_t id,
if (UNIV_UNLIKELY(!b->frame))
{
unzip:
if (b->lock.x_lock_try());
else if (c == FIX_NOWAIT)
goto would_block;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment