mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / storage / innodb_plugin / include / mem0pool.h
blob26bac1c814b22bcbbb43708bca304d7521b135fb
1 /*****************************************************************************
3 Copyright (c) 1994, 2009, Innobase Oy. All Rights Reserved.
5 This program is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free Software
7 Foundation; version 2 of the License.
9 This program is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
13 You should have received a copy of the GNU General Public License along with
14 this program; if not, write to the Free Software Foundation, Inc.,
15 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 *****************************************************************************/
19 /**************************************************//**
20 @file include/mem0pool.h
21 The lowest-level memory management
23 Created 6/9/1994 Heikki Tuuri
24 *******************************************************/
26 #ifndef mem0pool_h
27 #define mem0pool_h
29 #include "univ.i"
30 #include "os0file.h"
31 #include "ut0lst.h"
33 /** Memory area header */
34 typedef struct mem_area_struct mem_area_t;
35 /** Memory pool */
36 typedef struct mem_pool_struct mem_pool_t;
38 /** The common memory pool */
39 extern mem_pool_t* mem_comm_pool;
41 /** Memory area header */
43 struct mem_area_struct{
44 ulint size_and_free; /*!< memory area size is obtained by
45 anding with ~MEM_AREA_FREE; area in
46 a free list if ANDing with
47 MEM_AREA_FREE results in nonzero */
48 UT_LIST_NODE_T(mem_area_t)
49 free_list; /*!< free list node */
52 /** Each memory area takes this many extra bytes for control information */
53 #define MEM_AREA_EXTRA_SIZE (ut_calc_align(sizeof(struct mem_area_struct),\
54 UNIV_MEM_ALIGNMENT))
56 /********************************************************************//**
57 Creates a memory pool.
58 @return memory pool */
59 UNIV_INTERN
60 mem_pool_t*
61 mem_pool_create(
62 /*============*/
63 ulint size); /*!< in: pool size in bytes */
64 /********************************************************************//**
65 Frees a memory pool. */
66 UNIV_INTERN
67 void
68 mem_pool_free(
69 /*==========*/
70 mem_pool_t* pool); /*!< in, own: memory pool */
71 /********************************************************************//**
72 Allocates memory from a pool. NOTE: This low-level function should only be
73 used in mem0mem.*!
74 @return own: allocated memory buffer */
75 UNIV_INTERN
76 void*
77 mem_area_alloc(
78 /*===========*/
79 ulint* psize, /*!< in: requested size in bytes; for optimum
80 space usage, the size should be a power of 2
81 minus MEM_AREA_EXTRA_SIZE;
82 out: allocated size in bytes (greater than
83 or equal to the requested size) */
84 mem_pool_t* pool); /*!< in: memory pool */
85 /********************************************************************//**
86 Frees memory to a pool. */
87 UNIV_INTERN
88 void
89 mem_area_free(
90 /*==========*/
91 void* ptr, /*!< in, own: pointer to allocated memory
92 buffer */
93 mem_pool_t* pool); /*!< in: memory pool */
94 /********************************************************************//**
95 Returns the amount of reserved memory.
96 @return reserved mmeory in bytes */
97 UNIV_INTERN
98 ulint
99 mem_pool_get_reserved(
100 /*==================*/
101 mem_pool_t* pool); /*!< in: memory pool */
102 /********************************************************************//**
103 Validates a memory pool.
104 @return TRUE if ok */
105 UNIV_INTERN
106 ibool
107 mem_pool_validate(
108 /*==============*/
109 mem_pool_t* pool); /*!< in: memory pool */
110 /********************************************************************//**
111 Prints info of a memory pool. */
112 UNIV_INTERN
113 void
114 mem_pool_print_info(
115 /*================*/
116 FILE* outfile,/*!< in: output file to write to */
117 mem_pool_t* pool); /*!< in: memory pool */
120 #ifndef UNIV_NONINL
121 #include "mem0pool.ic"
122 #endif
124 #endif