summaryrefslogtreecommitdiff
path: root/storage/innobase
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2020-06-03 14:07:30 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2020-06-03 14:13:16 +0300
commit58d2d82022ca569f7bb913e60993ebf2299d58ca (patch)
tree74165d3aa1ba0efdf6d393c89e65465e7b8a6674 /storage/innobase
parent463a8fc5fd8890047159f59b58d295248987265e (diff)
downloadmariadb-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.cc1
-rw-r--r--storage/innobase/fsp/fsp0fsp.cc2
-rw-r--r--storage/innobase/trx/trx0undo.cc1
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);