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
This commit is contained in:
parent
09b1269e4a
commit
f168050e90
@ -2608,7 +2608,10 @@ buf_block_t *buf_pool_t::page_fix(const page_id_t id,
|
|||||||
return reinterpret_cast<buf_block_t*>(-1);
|
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:
|
wait_for_unzip:
|
||||||
b->unfix();
|
b->unfix();
|
||||||
@ -2629,6 +2632,7 @@ buf_block_t *buf_pool_t::page_fix(const page_id_t id,
|
|||||||
|
|
||||||
if (UNIV_UNLIKELY(!b->frame))
|
if (UNIV_UNLIKELY(!b->frame))
|
||||||
{
|
{
|
||||||
|
unzip:
|
||||||
if (b->lock.x_lock_try());
|
if (b->lock.x_lock_try());
|
||||||
else if (c == FIX_NOWAIT)
|
else if (c == FIX_NOWAIT)
|
||||||
goto would_block;
|
goto would_block;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user