From 7319444c084847c24a66684602ba7482acb7c31e Mon Sep 17 00:00:00 2001 From: marko <> Date: Tue, 30 Oct 2007 09:27:09 +0000 Subject: [PATCH] branches/zip: Improve Valgrind instrumentation. buf_LRU_free_block(): Check that the block descriptor contains valid data. buf_buddy_relocate(): Check that the source block contains valid data. buf_page_get_gen(): Do not dereference bpage after calling buf_relocate(). This avoids a bogus Valgrind warning; the memory itself was valid. buf_page_hash_get(): Check that the returned block descriptor contains valid data. --- buf/buf0buddy.c | 5 ++--- buf/buf0buf.c | 5 +++-- buf/buf0lru.c | 1 + include/buf0buf.ic | 9 ++++++--- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/buf/buf0buddy.c b/buf/buf0buddy.c index 3facd45554c..2b017cf0cdf 100644 --- a/buf/buf0buddy.c +++ b/buf/buf0buddy.c @@ -528,9 +528,8 @@ buf_buddy_relocate( ut_ad(!mutex_own(&buf_pool->zip_mutex)); ut_ad(!ut_align_offset(src, size)); ut_ad(!ut_align_offset(dst, size)); -#ifdef UNIV_DEBUG_VALGRIND - VALGRIND_CHECK_MEM_IS_ADDRESSABLE(dst, BUF_BUDDY_LOW << i); -#endif /* UNIV_DEBUG_VALGRIND */ + UNIV_MEM_ASSERT_RW(src, size); + UNIV_MEM_ASSERT_W(dst, size); /* We assume that all memory from buf_buddy_alloc() is used for either compressed pages or buf_page_t diff --git a/buf/buf0buf.c b/buf/buf0buf.c index 41d108d0fb6..3cd5b0c1b00 100644 --- a/buf/buf0buf.c +++ b/buf/buf0buf.c @@ -1813,8 +1813,8 @@ wait_until_unfixed: buf_block_init_low(block); block->lock_hash_val = lock_rec_hash(space, offset); - UNIV_MEM_DESC(bpage->zip.data, - page_zip_get_size(&bpage->zip), block); + UNIV_MEM_DESC(&block->page.zip.data, + page_zip_get_size(&block->page.zip), block); if (buf_page_get_state(&block->page) == BUF_BLOCK_ZIP_PAGE) { @@ -1884,6 +1884,7 @@ wait_until_unfixed: ut_ad(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE); mutex_enter(&block->mutex); + UNIV_MEM_ASSERT_RW(&block->page, sizeof block->page); buf_block_buf_fix_inc(block, file, line); mutex_exit(&buf_pool->mutex); diff --git a/buf/buf0lru.c b/buf/buf0lru.c index 02b136e986b..c142420763d 100644 --- a/buf/buf0lru.c +++ b/buf/buf0lru.c @@ -949,6 +949,7 @@ buf_LRU_free_block( ut_ad(buf_page_in_file(bpage)); ut_ad(bpage->in_LRU_list); ut_ad(!bpage->in_flush_list == !bpage->oldest_modification); + UNIV_MEM_ASSERT_RW(bpage, sizeof *bpage); if (!buf_page_can_relocate(bpage)) { diff --git a/include/buf0buf.ic b/include/buf0buf.ic index edb2f880050..0a75c6775b9 100644 --- a/include/buf0buf.ic +++ b/include/buf0buf.ic @@ -897,9 +897,12 @@ buf_page_hash_get( HASH_SEARCH(hash, buf_pool->page_hash, fold, buf_page_t*, bpage, bpage->space == space && bpage->offset == offset); - ut_a(!bpage || buf_page_in_file(bpage)); - ut_ad(!bpage || bpage->in_page_hash); - ut_ad(!bpage || !bpage->in_zip_hash); + if (bpage) { + ut_a(buf_page_in_file(bpage)); + ut_ad(bpage->in_page_hash); + ut_ad(bpage->in_zip_hash); + UNIV_MEM_ASSERT_RW(bpage, sizeof *bpage); + } return(bpage); }