mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug#13390506 - VALGRIND FAILURE AFTER THE FIX FOR 13371000
rb://816 approved by: Marko Makela The title is misleading. This bug was actually introduced by bug 12635227 and was unearthed by a later optimization. We need to free buf_page_t structs that we are allocating using malloc() at shutdown.
This commit is contained in:
@ -0,0 +1,13 @@
|
|||||||
|
set global innodb_file_per_table=on;
|
||||||
|
set global innodb_file_format=`1`;
|
||||||
|
create table t1(a text) engine=innodb key_block_size=8;
|
||||||
|
SELECT page_size FROM information_schema.innodb_cmpmem WHERE pages_used > 0;
|
||||||
|
page_size
|
||||||
|
8192
|
||||||
|
drop table t1;
|
||||||
|
SELECT page_size FROM information_schema.innodb_cmpmem WHERE pages_used > 0;
|
||||||
|
page_size
|
||||||
|
create table t2(a text) engine=innodb;
|
||||||
|
SELECT page_size FROM information_schema.innodb_cmpmem WHERE pages_used > 0;
|
||||||
|
page_size
|
||||||
|
drop table t2;
|
@ -0,0 +1 @@
|
|||||||
|
--innodb-buffer-pool-size=8M
|
59
mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table.test
Normal file
59
mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table.test
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
-- source include/have_innodb_plugin.inc
|
||||||
|
|
||||||
|
let $per_table=`select @@innodb_file_per_table`;
|
||||||
|
let $format=`select @@innodb_file_format`;
|
||||||
|
|
||||||
|
-- let $query_i_s = SELECT page_size FROM information_schema.innodb_cmpmem WHERE pages_used > 0
|
||||||
|
|
||||||
|
set global innodb_file_per_table=on;
|
||||||
|
set global innodb_file_format=`1`;
|
||||||
|
|
||||||
|
create table t1(a text) engine=innodb key_block_size=8;
|
||||||
|
|
||||||
|
-- disable_query_log
|
||||||
|
|
||||||
|
# insert some rows so we are using compressed pages
|
||||||
|
-- let $i = 10
|
||||||
|
while ($i)
|
||||||
|
{
|
||||||
|
insert into t1 values(repeat('abcdefghijklmnopqrstuvwxyz',100));
|
||||||
|
dec $i;
|
||||||
|
}
|
||||||
|
-- enable_query_log
|
||||||
|
|
||||||
|
# we should be using some 8K pages
|
||||||
|
-- eval $query_i_s
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
# no lazy eviction at drop table in 5.1 there should still be no
|
||||||
|
# used 8K pages
|
||||||
|
-- eval $query_i_s
|
||||||
|
|
||||||
|
# create a non-compressed table and insert enough into it to evict
|
||||||
|
# compressed pages
|
||||||
|
create table t2(a text) engine=innodb;
|
||||||
|
|
||||||
|
-- disable_query_log
|
||||||
|
|
||||||
|
-- let $i = 200
|
||||||
|
while ($i)
|
||||||
|
{
|
||||||
|
insert into t2 values(repeat('abcdefghijklmnopqrstuvwxyz',1000));
|
||||||
|
dec $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
-- enable_query_log
|
||||||
|
|
||||||
|
# now there should be no 8K pages in the buffer pool
|
||||||
|
-- eval $query_i_s
|
||||||
|
|
||||||
|
drop table t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# restore environment to the state it was before this test execution
|
||||||
|
#
|
||||||
|
|
||||||
|
-- disable_query_log
|
||||||
|
eval set global innodb_file_format=$format;
|
||||||
|
eval set global innodb_file_per_table=$per_table;
|
@ -946,6 +946,24 @@ buf_pool_free(void)
|
|||||||
{
|
{
|
||||||
buf_chunk_t* chunk;
|
buf_chunk_t* chunk;
|
||||||
buf_chunk_t* chunks;
|
buf_chunk_t* chunks;
|
||||||
|
buf_page_t* bpage;
|
||||||
|
|
||||||
|
bpage = UT_LIST_GET_LAST(buf_pool->LRU);
|
||||||
|
while (bpage != NULL) {
|
||||||
|
buf_page_t* prev_bpage = UT_LIST_GET_PREV(LRU, bpage);
|
||||||
|
enum buf_page_state state = buf_page_get_state(bpage);
|
||||||
|
|
||||||
|
ut_ad(buf_page_in_file(bpage));
|
||||||
|
ut_ad(bpage->in_LRU_list);
|
||||||
|
|
||||||
|
if (state != BUF_BLOCK_FILE_PAGE) {
|
||||||
|
/* We must not have any dirty block. */
|
||||||
|
ut_ad(state == BUF_BLOCK_ZIP_PAGE);
|
||||||
|
buf_page_free_descriptor(bpage);
|
||||||
|
}
|
||||||
|
|
||||||
|
bpage = prev_bpage;
|
||||||
|
}
|
||||||
|
|
||||||
chunks = buf_pool->chunks;
|
chunks = buf_pool->chunks;
|
||||||
chunk = chunks + buf_pool->n_chunks;
|
chunk = chunks + buf_pool->n_chunks;
|
||||||
|
Reference in New Issue
Block a user