MDEV-31442 page_cleaner thread aborts while releasing the tablespace

After further I/O on a tablespace has been stopped
(for example due to DROP TABLE or an operation that
rebuilds a table), page cleaner thread tries to
flush the pending writes for the tablespace and
releases the tablespace reference even though it was not
acquired.

fil_space_t::flush(): Don't release the tablespace when it is
being stopped and closed

Thanks to Marko Mäkelä for suggesting this patch.
parent b3074128
......@@ -1526,9 +1526,11 @@ template<bool have_reference> inline void fil_space_t::flush()
flush_low();
else
{
if (!(acquire_low() & (STOPPING | CLOSING)))
if (!(acquire_low(STOPPING & CLOSING) & (STOPPING | CLOSING)))
{
flush_low();
release();
release();
}
}
}
......
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