diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-06-03 14:07:30 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-06-03 14:13:16 +0300 |
commit | 58d2d82022ca569f7bb913e60993ebf2299d58ca (patch) | |
tree | 74165d3aa1ba0efdf6d393c89e65465e7b8a6674 /storage/innobase | |
parent | 463a8fc5fd8890047159f59b58d295248987265e (diff) | |
download | mariadb-git-58d2d82022ca569f7bb913e60993ebf2299d58ca.tar.gz |
MDEV-22710 Assertion ...status != buf_page_t::FREED in ibuf_remove_free_page()
The buf_page_free() call that was introduced in MDEV-15528 was
performed too early in fseg_free_page(), tripping a debug check
in ibuf_remove_free_page(). In all other callers, we can (and will)
invoke buf_page_free() right after fseg_free_page(), but in
ibuf_remove_free_page() we will defer that call to the end of the
mini-transaction. (That call was already present.)
Diffstat (limited to 'storage/innobase')
-rw-r--r-- | storage/innobase/btr/btr0btr.cc | 1 | ||||
-rw-r--r-- | storage/innobase/fsp/fsp0fsp.cc | 2 | ||||
-rw-r--r-- | storage/innobase/trx/trx0undo.cc | 1 |
3 files changed, 2 insertions, 2 deletions
diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc index 9658f4cf2a2..10a2612c09f 100644 --- a/storage/innobase/btr/btr0btr.cc +++ b/storage/innobase/btr/btr0btr.cc @@ -746,6 +746,7 @@ void btr_page_free(dict_index_t* index, buf_block_t* block, mtr_t* mtr, : PAGE_HEADER + PAGE_BTR_SEG_TOP]; fseg_free_page(seg_header, index->table->space, block->page.id.page_no(), mtr); + buf_page_free(block->page.id, mtr, __FILE__, __LINE__); /* The page was marked free in the allocation bitmap, but it should remain exclusively latched until mtr_t::commit() or until it diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc index d7608bf8c09..9bab0fe355a 100644 --- a/storage/innobase/fsp/fsp0fsp.cc +++ b/storage/innobase/fsp/fsp0fsp.cc @@ -2622,8 +2622,6 @@ fseg_free_page( fseg_free_page_low(seg_inode, iblock, space, offset, mtr); - buf_page_free(page_id_t(space->id, offset), mtr, __FILE__, __LINE__); - DBUG_VOID_RETURN; } diff --git a/storage/innobase/trx/trx0undo.cc b/storage/innobase/trx/trx0undo.cc index c5dab0be836..687258767ce 100644 --- a/storage/innobase/trx/trx0undo.cc +++ b/storage/innobase/trx/trx0undo.cc @@ -629,6 +629,7 @@ trx_undo_free_page( fseg_free_page(TRX_UNDO_SEG_HDR + TRX_UNDO_FSEG_HEADER + header_block->frame, rseg->space, page_no, mtr); + buf_page_free(page_id_t(space, page_no), mtr, __FILE__, __LINE__); const fil_addr_t last_addr = flst_get_last( TRX_UNDO_SEG_HDR + TRX_UNDO_PAGE_LIST + header_block->frame); |