List:Commits« Previous MessageNext Message »
From:Inaam Rana Date:November 18 2011 3:59pm
Subject:bzr commit into mysql-5.1 branch (inaam.rana:3643) Bug#13390506
View as plain text  
#At file:///home/inaam/w/mysql-5.1/ based on revid:jorgen.loland@stripped

 3643 Inaam Rana	2011-11-18
      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.

    added:
      mysql-test/suite/innodb_plugin/r/innodb_cmp_drop_table.result
      mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table-master.opt
      mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table.test
    modified:
      storage/innodb_plugin/buf/buf0buf.c
=== added file 'mysql-test/suite/innodb_plugin/r/innodb_cmp_drop_table.result'
--- a/mysql-test/suite/innodb_plugin/r/innodb_cmp_drop_table.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/innodb_plugin/r/innodb_cmp_drop_table.result	revid:inaam.rana@stripped
@@ -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;

=== added file 'mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table-master.opt'
--- a/mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table-master.opt	revid:inaam.rana@stripped
@@ -0,0 +1 @@
+--innodb-buffer-pool-size=8M

=== added file 'mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table.test'
--- a/mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/innodb_plugin/t/innodb_cmp_drop_table.test	revid:inaam.rana@stripped
@@ -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;

=== modified file 'storage/innodb_plugin/buf/buf0buf.c'
--- a/storage/innodb_plugin/buf/buf0buf.c	revid:jorgen.loland@stripped
+++ b/storage/innodb_plugin/buf/buf0buf.c	revid:inaam.rana@stripped
@@ -946,6 +946,24 @@ buf_pool_free(void)
 {
 	buf_chunk_t*	chunk;
 	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;
 	chunk = chunks + buf_pool->n_chunks;


Attachment: [text/bzr-bundle] bzr/inaam.rana@oracle.com-20111118155910-3hnq542q3cpp22tz.bundle
Thread
bzr commit into mysql-5.1 branch (inaam.rana:3643) Bug#13390506Inaam Rana21 Nov