46
46
void init_alloc_root(MEM_ROOT *mem_root, size_t block_size,
47
47
size_t pre_alloc_size __attribute__((unused)))
49
DBUG_ENTER("init_alloc_root");
50
DBUG_PRINT("enter",("root: 0x%lx", (long) mem_root));
52
49
mem_root->free= mem_root->used= mem_root->pre_alloc= 0;
53
50
mem_root->min_malloc= 32;
54
51
mem_root->block_size= block_size - ALLOC_ROOT_MIN_BLOCK_SIZE;
93
90
void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size,
94
91
size_t pre_alloc_size __attribute__((unused)))
96
DBUG_ASSERT(alloc_root_inited(mem_root));
93
assert(alloc_root_inited(mem_root));
98
95
mem_root->block_size= block_size - ALLOC_ROOT_MIN_BLOCK_SIZE;
99
96
#if !(defined(HAVE_purify) && defined(EXTRA_DEBUG))
150
147
#if defined(HAVE_purify) && defined(EXTRA_DEBUG)
151
148
register USED_MEM *next;
152
DBUG_ENTER("alloc_root");
153
DBUG_PRINT("enter",("root: 0x%lx", (long) mem_root));
155
DBUG_ASSERT(alloc_root_inited(mem_root));
150
assert(alloc_root_inited(mem_root));
157
152
length+=ALIGN_SIZE(sizeof(USED_MEM));
158
153
if (!(next = (USED_MEM*) my_malloc(length,MYF(MY_WME | ME_FATALERROR))))
160
155
if (mem_root->error_handler)
161
156
(*mem_root->error_handler)();
162
DBUG_RETURN((uchar*) 0); /* purecov: inspected */
157
return((uchar*) 0); /* purecov: inspected */
164
159
next->next= mem_root->used;
165
160
next->size= length;
166
161
mem_root->used= next;
167
DBUG_PRINT("exit",("ptr: 0x%lx", (long) (((char*) next)+
168
ALIGN_SIZE(sizeof(USED_MEM)))));
169
DBUG_RETURN((uchar*) (((char*) next)+ALIGN_SIZE(sizeof(USED_MEM))));
162
return((uchar*) (((char*) next)+ALIGN_SIZE(sizeof(USED_MEM))));
171
164
size_t get_size, block_size;
173
166
register USED_MEM *next= 0;
174
167
register USED_MEM **prev;
175
DBUG_ENTER("alloc_root");
176
DBUG_PRINT("enter",("root: 0x%lx", (long) mem_root));
177
DBUG_ASSERT(alloc_root_inited(mem_root));
168
assert(alloc_root_inited(mem_root));
179
170
length= ALIGN_SIZE(length);
180
171
if ((*(prev= &mem_root->free)) != NULL)
331
320
void free_root(MEM_ROOT *root, myf MyFlags)
333
322
register USED_MEM *next,*old;
334
DBUG_ENTER("free_root");
335
DBUG_PRINT("enter",("root: 0x%lx flags: %u", (long) root, (uint) MyFlags));
337
324
if (MyFlags & MY_MARK_BLOCKS_FREE)
339
326
mark_blocks_free(root);
342
329
if (!(MyFlags & MY_KEEP_PREALLOC))
343
330
root->pre_alloc=0;