diff options
author | Inaam Rana <inaam.rana@oracle.com> | 2011-11-18 10:59:10 -0500 |
---|---|---|
committer | Inaam Rana <inaam.rana@oracle.com> | 2011-11-18 10:59:10 -0500 |
commit | f28e7bd0645d478d33d7ae3b974931c7991cd0bd (patch) | |
tree | 7655bb074a2e1497ed003cdfa05de8d04d95888b /storage | |
parent | 523c849d14acf041670337afa6a7e2a6deeaab67 (diff) | |
download | mariadb-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.c | 18 |
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; |