diff options
author | unknown <knielsen@knielsen-hq.org> | 2011-12-15 10:34:14 +0100 |
---|---|---|
committer | unknown <knielsen@knielsen-hq.org> | 2011-12-15 10:34:14 +0100 |
commit | a6c7c53b63384f0b58ff8e34798c0952ed6ac7a7 (patch) | |
tree | 5d4eaafa051042a726cc5ad7376b13b96111f6cd /storage/xtradb/include/buf0buddy.ic | |
parent | 79479ee97571e8023b0269ffddbf525d54955273 (diff) | |
parent | 6afbf295f018e077be7c569ef8e433e510441bea (diff) | |
download | mariadb-git-a6c7c53b63384f0b58ff8e34798c0952ed6ac7a7.tar.gz |
Merge XtraDB from Percona-server-5.5.17-rel22.1 into MariaDB 5.5
Diffstat (limited to 'storage/xtradb/include/buf0buddy.ic')
-rw-r--r-- | storage/xtradb/include/buf0buddy.ic | 70 |
1 files changed, 38 insertions, 32 deletions
diff --git a/storage/xtradb/include/buf0buddy.ic b/storage/xtradb/include/buf0buddy.ic index 4dbfed52abe..3dd75276656 100644 --- a/storage/xtradb/include/buf0buddy.ic +++ b/storage/xtradb/include/buf0buddy.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2006, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 2006, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -36,22 +36,22 @@ Created December 2006 by Marko Makela /**********************************************************************//** Allocate a block. The thread calling this function must hold buf_pool->mutex and must not hold buf_pool->zip_mutex or any block->mutex. -The buf_pool->mutex may only be released and reacquired if lru != NULL. -@return allocated block, possibly NULL if lru==NULL */ +The buf_pool_mutex may be released and reacquired. +@return allocated block, never NULL */ UNIV_INTERN void* buf_buddy_alloc_low( /*================*/ - buf_pool_t* buf_pool, - /*!< in: buffer pool in which the page resides */ - ulint i, /*!< in: index of buf_pool->zip_free[], - or BUF_BUDDY_SIZES */ - ibool* lru, /*!< in: pointer to a variable that will be assigned - TRUE if storage was allocated from the LRU list - and buf_pool->mutex was temporarily released, - or NULL if the LRU list should not be used */ - ibool have_page_hash_mutex) - __attribute__((malloc)); + buf_pool_t* buf_pool, /*!< in/out: buffer pool instance */ + ulint i, /*!< in: index of buf_pool->zip_free[], + or BUF_BUDDY_SIZES */ + ibool* lru, /*!< in: pointer to a variable that + will be assigned TRUE if storage was + allocated from the LRU list and + buf_pool->mutex was temporarily + released */ + ibool have_page_hash_mutex) + __attribute__((malloc, nonnull)); /**********************************************************************//** Deallocate a block. */ @@ -79,6 +79,8 @@ buf_buddy_get_slot( ulint i; ulint s; + ut_ad(size >= PAGE_ZIP_MIN_SIZE); + for (i = 0, s = BUF_BUDDY_LOW; s < size; i++, s <<= 1) { } @@ -89,32 +91,32 @@ buf_buddy_get_slot( /**********************************************************************//** Allocate a block. The thread calling this function must hold buf_pool->mutex and must not hold buf_pool->zip_mutex or any -block->mutex. The buf_pool->mutex may only be released and reacquired -if lru != NULL. This function should only be used for allocating -compressed page frames or control blocks (buf_page_t). Allocated -control blocks must be properly initialized immediately after -buf_buddy_alloc() has returned the memory, before releasing -buf_pool->mutex. -@return allocated block, possibly NULL if lru == NULL */ +block->mutex. The buf_pool->mutex may be released and reacquired. +This function should only be used for allocating compressed page frames. +@return allocated block, never NULL */ UNIV_INLINE -void* +byte* buf_buddy_alloc( /*============*/ - buf_pool_t* buf_pool, /*!< in: buffer pool in which + buf_pool_t* buf_pool, /*!< in/out: buffer pool in which the page resides */ - ulint size, /*!< in: block size, up to - UNIV_PAGE_SIZE */ + ulint size, /*!< in: compressed page size + (between PAGE_ZIP_MIN_SIZE and + UNIV_PAGE_SIZE) */ ibool* lru, /*!< in: pointer to a variable that will be assigned TRUE if storage was allocated from the LRU list and buf_pool->mutex was - temporarily released, or NULL if - the LRU list should not be used */ + temporarily released */ ibool have_page_hash_mutex) { //ut_ad(buf_pool_mutex_own(buf_pool)); + ut_ad(ut_is_2pow(size)); + ut_ad(size >= PAGE_ZIP_MIN_SIZE); + ut_ad(size <= UNIV_PAGE_SIZE); - return(buf_buddy_alloc_low(buf_pool, buf_buddy_get_slot(size), lru, have_page_hash_mutex)); + return((byte*) buf_buddy_alloc_low(buf_pool, buf_buddy_get_slot(size), + lru, have_page_hash_mutex)); } /**********************************************************************//** @@ -123,14 +125,18 @@ UNIV_INLINE void buf_buddy_free( /*===========*/ - buf_pool_t* buf_pool, /*!< in: buffer pool instance */ - void* buf, /*!< in: block to be freed, must not be - pointed to by the buffer pool */ - ulint size, /*!< in: block size, up to - UNIV_PAGE_SIZE */ + buf_pool_t* buf_pool, /*!< in/out: buffer pool in which + the block resides */ + void* buf, /*!< in: block to be freed, must not + be pointed to by the buffer pool */ + ulint size, /*!< in: block size, + up to UNIV_PAGE_SIZE */ ibool have_page_hash_mutex) { //ut_ad(buf_pool_mutex_own(buf_pool)); + ut_ad(ut_is_2pow(size)); + ut_ad(size >= PAGE_ZIP_MIN_SIZE); + ut_ad(size <= UNIV_PAGE_SIZE); if (!have_page_hash_mutex) { mutex_enter(&buf_pool->LRU_list_mutex); |