1 /* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
2 
3    This program is free software; you can redistribute it and/or modify
4    it under the terms of the GNU General Public License as published by
5    the Free Software Foundation; version 2 of the License.
6 
7    This program is distributed in the hope that it will be useful,
8    but WITHOUT ANY WARRANTY; without even the implied warranty of
9    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10    GNU General Public License for more details.
11 
12    You should have received a copy of the GNU General Public License
13    along with this program; if not, write to the Free Software
14    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335  USA */
15 
16 /*
17    Data structures for mysys/my_alloc.c (root memory allocator)
18 */
19 
20 #ifndef _my_alloc_h
21 #define _my_alloc_h
22 
23 #include <mysql/psi/psi_memory.h>
24 
25 #define ALLOC_MAX_BLOCK_TO_DROP			4096
26 #define ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP	10
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 typedef struct st_used_mem
33 {				   /* struct for once_alloc (block) */
34   struct st_used_mem *next;	   /* Next block in use */
35   size_t left;                     /* memory left in block  */
36   size_t size;                     /* size of block */
37 } USED_MEM;
38 
39 
40 typedef struct st_mem_root
41 {
42   USED_MEM *free;                  /* blocks with free memory in it */
43   USED_MEM *used;                  /* blocks almost without free memory */
44   USED_MEM *pre_alloc;             /* preallocated block */
45   /* if block have less memory it will be put in 'used' list */
46   size_t min_malloc;
47   size_t block_size;               /* initial block size */
48   unsigned int block_num;          /* allocated blocks counter */
49   /*
50      first free block in queue test counter (if it exceed
51      MAX_BLOCK_USAGE_BEFORE_DROP block will be dropped in 'used' list)
52   */
53   unsigned int first_block_usage;
54 
55   void (*error_handler)(void);
56 
57   PSI_memory_key m_psi_key;
58 } MEM_ROOT;
59 
60 #ifdef  __cplusplus
61 }
62 #endif
63 
64 #endif
65