summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorInaam Rana <inaam.rana@oracle.com>2011-11-18 10:59:10 -0500
committerInaam Rana <inaam.rana@oracle.com>2011-11-18 10:59:10 -0500
commitf28e7bd0645d478d33d7ae3b974931c7991cd0bd (patch)
tree7655bb074a2e1497ed003cdfa05de8d04d95888b /storage
parent523c849d14acf041670337afa6a7e2a6deeaab67 (diff)
downloadmariadb-git-f28e7bd0645d478d33d7ae3b974931c7991cd0bd.tar.gz
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.
Diffstat (limited to 'storage')
-rw-r--r--storage/innodb_plugin/buf/buf0buf.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/storage/innodb_plugin/buf/buf0buf.c b/storage/innodb_plugin/buf/buf0buf.c
index 7d03f08f61f..d88860b807b 100644
--- a/storage/innodb_plugin/buf/buf0buf.c
+++ b/storage/innodb_plugin/buf/buf0buf.c
@@ -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;