mirror of
https://github.com/MariaDB/server.git
synced 2025-09-03 20:43:11 +03:00
MDEV-20805 ibuf_add_free_page() is not initializing FIL_PAGE_TYPE first
In the function recv_parse_or_apply_log_rec_body() there are debug checks for validating the state of the page when redo log records are being applied. Most notably, FIL_PAGE_TYPE should be set before anything else is being written to the page. ibuf_add_free_page(): Set FIL_PAGE_TYPE before performing any other changes.
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1997, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1997, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
Copyright (c) 2019, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@@ -2222,14 +2223,14 @@ ibuf_add_free_page(void)
|
|||||||
buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE_NEW);
|
buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE_NEW);
|
||||||
page = buf_block_get_frame(block);
|
page = buf_block_get_frame(block);
|
||||||
|
|
||||||
|
mlog_write_ulint(page + FIL_PAGE_TYPE, FIL_PAGE_IBUF_FREE_LIST,
|
||||||
|
MLOG_2BYTES, &mtr);
|
||||||
|
|
||||||
/* Add the page to the free list and update the ibuf size data */
|
/* Add the page to the free list and update the ibuf size data */
|
||||||
|
|
||||||
flst_add_last(root + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST,
|
flst_add_last(root + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST,
|
||||||
page + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST_NODE, &mtr);
|
page + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST_NODE, &mtr);
|
||||||
|
|
||||||
mlog_write_ulint(page + FIL_PAGE_TYPE, FIL_PAGE_IBUF_FREE_LIST,
|
|
||||||
MLOG_2BYTES, &mtr);
|
|
||||||
|
|
||||||
ibuf->seg_size++;
|
ibuf->seg_size++;
|
||||||
ibuf->free_list_len++;
|
ibuf->free_list_len++;
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1997, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1997, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
Copyright (c) 2019, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
the terms of the GNU General Public License as published by the Free Software
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@@ -2266,14 +2267,14 @@ ibuf_add_free_page(void)
|
|||||||
buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE_NEW);
|
buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE_NEW);
|
||||||
page = buf_block_get_frame(block);
|
page = buf_block_get_frame(block);
|
||||||
|
|
||||||
|
mlog_write_ulint(page + FIL_PAGE_TYPE, FIL_PAGE_IBUF_FREE_LIST,
|
||||||
|
MLOG_2BYTES, &mtr);
|
||||||
|
|
||||||
/* Add the page to the free list and update the ibuf size data */
|
/* Add the page to the free list and update the ibuf size data */
|
||||||
|
|
||||||
flst_add_last(root + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST,
|
flst_add_last(root + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST,
|
||||||
page + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST_NODE, &mtr);
|
page + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST_NODE, &mtr);
|
||||||
|
|
||||||
mlog_write_ulint(page + FIL_PAGE_TYPE, FIL_PAGE_IBUF_FREE_LIST,
|
|
||||||
MLOG_2BYTES, &mtr);
|
|
||||||
|
|
||||||
ibuf->seg_size++;
|
ibuf->seg_size++;
|
||||||
ibuf->free_list_len++;
|
ibuf->free_list_len++;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user