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