Commit 74bd3683 authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-23839 innodb_fast_shutdown=0 hang on change buffer merge

ibuf_merge_or_delete_for_page(): Do not attempt to invoke
ibuf_delete_recs() on a page of the change buffer itself.
The caller could already be holding ibuf->index->lock,
and an attempt to acquire it in S mode would hang the release server
or cause an assertion failure in rw_lock_s_lock_func() in a debug
server.

This problem was reproducible on 1 out of 2 runs of the following:
./mtr --no-reorder \
innodb.innodb-page_compression_default \
innodb.innodb-page_compression_snappy \
innodb.innodb-page_compression_zip \
innodb.innodb_wl6326_big innodb.xa_recovery
parent a441b064
...@@ -4472,7 +4472,10 @@ ibuf_merge_or_delete_for_page( ...@@ -4472,7 +4472,10 @@ ibuf_merge_or_delete_for_page(
fil_space_release(space); fil_space_release(space);
if (UNIV_UNLIKELY(srv_shutdown_state) if (UNIV_UNLIKELY(srv_shutdown_state)
&& !srv_fast_shutdown) { && !srv_fast_shutdown
&& (!block
|| btr_page_get_index_id(block->frame)
!= DICT_IBUF_ID_MIN + IBUF_SPACE_ID)) {
/* Prevent an infinite loop on slow /* Prevent an infinite loop on slow
shutdown, in case the bitmap bits are shutdown, in case the bitmap bits are
wrongly clear even though buffered wrongly clear even though buffered
......
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