Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/lib/mempool-system-clean.c @ 7863:b145040d5adb HEAD
FreeBSD compile warning fix.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 13 Jun 2008 10:07:09 +0300 |
parents | fa00c24cf0d6 |
children | 96b8f50c9eea |
rev | line source |
---|---|
7086
7ed926ed7aa4
Updated copyright notices to include year 2008.
Timo Sirainen <tss@iki.fi>
parents:
6825
diff
changeset
|
1 /* Copyright (c) 2007-2008 Dovecot authors, see the included COPYING file */ |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 /* @UNSAFE: whole file */ |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "lib.h" |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 #include "safe-memset.h" |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 #include "mempool.h" |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #ifdef HAVE_MALLOC_H |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 # include <malloc.h> |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 #endif |
7863 | 12 #ifdef HAVE_MALLOC_NP_H |
13 # include <malloc_np.h> /* for malloc_usable_size() with FreeBSD */ | |
14 #endif | |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 #include <stdlib.h> |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 #ifdef HAVE_GC_GC_H |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 # include <gc/gc.h> |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 #elif defined (HAVE_GC_H) |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 # include <gc.h> |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 #endif |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 |
5378
61255eb991c3
Actually use MEM_ALIGN_SIZE to get the alignment right
Timo Sirainen <tss@iki.fi>
parents:
5377
diff
changeset
|
23 /* use the maximum of required memory alignment and sizeof(void *) |
61255eb991c3
Actually use MEM_ALIGN_SIZE to get the alignment right
Timo Sirainen <tss@iki.fi>
parents:
5377
diff
changeset
|
24 (sizeof(size_t) is assumed to be same. it always is.) */ |
61255eb991c3
Actually use MEM_ALIGN_SIZE to get the alignment right
Timo Sirainen <tss@iki.fi>
parents:
5377
diff
changeset
|
25 #if MEM_ALIGN_SIZE > SIZEOF_VOID_P |
61255eb991c3
Actually use MEM_ALIGN_SIZE to get the alignment right
Timo Sirainen <tss@iki.fi>
parents:
5377
diff
changeset
|
26 # define EXTRA_SIZE_SPACE MEM_ALIGN_SIZE |
61255eb991c3
Actually use MEM_ALIGN_SIZE to get the alignment right
Timo Sirainen <tss@iki.fi>
parents:
5377
diff
changeset
|
27 #else |
61255eb991c3
Actually use MEM_ALIGN_SIZE to get the alignment right
Timo Sirainen <tss@iki.fi>
parents:
5377
diff
changeset
|
28 # define EXTRA_SIZE_SPACE SIZEOF_VOID_P |
61255eb991c3
Actually use MEM_ALIGN_SIZE to get the alignment right
Timo Sirainen <tss@iki.fi>
parents:
5377
diff
changeset
|
29 #endif |
5377 | 30 |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 static const char *pool_system_clean_get_name(pool_t pool); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 static void pool_system_clean_ref(pool_t pool); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 static void pool_system_clean_unref(pool_t *pool); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 static void *pool_system_clean_malloc(pool_t pool, size_t size); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 static void pool_system_clean_free(pool_t pool, void *mem); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 static void *pool_system_clean_realloc(pool_t pool, void *mem, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 size_t old_size, size_t new_size); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 static void pool_system_clean_clear(pool_t pool); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 static size_t pool_system_clean_get_max_easy_alloc_size(pool_t pool); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 static struct pool_vfuncs static_system_clean_pool_vfuncs = { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 pool_system_clean_get_name, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 pool_system_clean_ref, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 pool_system_clean_unref, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 pool_system_clean_malloc, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 pool_system_clean_free, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 pool_system_clean_realloc, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 pool_system_clean_clear, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 pool_system_clean_get_max_easy_alloc_size |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 }; |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 static struct pool static_system_clean_pool = { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 MEMBER(v) &static_system_clean_pool_vfuncs, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 MEMBER(alloconly_pool) FALSE, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 MEMBER(datastack_pool) FALSE |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 }; |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
63 pool_t system_clean_pool = &static_system_clean_pool; |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5378
diff
changeset
|
65 static const char *pool_system_clean_get_name(pool_t pool ATTR_UNUSED) |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 return "system clean"; |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
68 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
69 |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5378
diff
changeset
|
70 static void pool_system_clean_ref(pool_t pool ATTR_UNUSED) |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
73 |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5378
diff
changeset
|
74 static void pool_system_clean_unref(pool_t *pool ATTR_UNUSED) |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 static size_t mem_get_size(void *mem) |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 #ifdef USE_GC |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 return GC_size(mem); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 #elif defined(HAVE_MALLOC_USABLE_SIZE) |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 return malloc_usable_size(mem); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 #else |
5377 | 85 return *((size_t *)PTR_OFFSET(mem, -EXTRA_SIZE_SPACE)); |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 #endif |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5378
diff
changeset
|
89 static void *pool_system_clean_malloc(pool_t pool ATTR_UNUSED, size_t size) |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
90 { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
91 void *mem; |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 |
6825
85385079b044
Use likely() and unlikely() macros to make commonly checked error handling
Timo Sirainen <tss@iki.fi>
parents:
6430
diff
changeset
|
93 if (unlikely(size == 0 || size > SSIZE_T_MAX)) |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 i_panic("Trying to allocate %"PRIuSIZE_T" bytes", size); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
96 #ifdef USE_GC |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
97 mem = GC_malloc(size); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
98 #else |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
99 #ifndef HAVE_MALLOC_USABLE_SIZE |
5377 | 100 size += EXTRA_SIZE_SPACE; |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
101 #endif |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
102 mem = calloc(size, 1); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
103 #endif |
6825
85385079b044
Use likely() and unlikely() macros to make commonly checked error handling
Timo Sirainen <tss@iki.fi>
parents:
6430
diff
changeset
|
104 if (unlikely(mem == NULL)) { |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
105 i_fatal_status(FATAL_OUTOFMEM, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
106 "pool_system_clean_malloc(): Out of memory"); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
108 #if !defined(USE_GC) && !defined(HAVE_MALLOC_USABLE_SIZE) |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
109 { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 size_t *saved_size = mem; |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 |
5377 | 112 *saved_size = size - EXTRA_SIZE_SPACE; |
113 mem = PTR_OFFSET(mem, EXTRA_SIZE_SPACE); | |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
114 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
115 #endif |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
116 return mem; |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
117 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
118 |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5378
diff
changeset
|
119 static void pool_system_clean_free(pool_t pool ATTR_UNUSED, void *mem) |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
120 { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 if (mem != NULL) { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 safe_memset(mem, 0, mem_get_size(mem)); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
123 #ifndef USE_GC |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
124 #ifndef HAVE_MALLOC_USABLE_SIZE |
5377 | 125 mem = PTR_OFFSET(mem, -EXTRA_SIZE_SPACE); |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
126 #endif |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 free(mem); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 #endif |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
129 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
130 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
131 |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5378
diff
changeset
|
132 static void *pool_system_clean_realloc(pool_t pool ATTR_UNUSED, void *mem, |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
133 size_t old_size, size_t new_size) |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
134 { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 void *new_mem; |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
136 |
6825
85385079b044
Use likely() and unlikely() macros to make commonly checked error handling
Timo Sirainen <tss@iki.fi>
parents:
6430
diff
changeset
|
137 if (unlikely(new_size == 0 || new_size > SSIZE_T_MAX)) |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 i_panic("Trying to allocate %"PRIuSIZE_T" bytes", new_size); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 new_mem = pool_system_clean_malloc(pool, new_size); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 if (mem != NULL) { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
142 #if !defined(USE_GC) && defined(HAVE_MALLOC_USABLE_SIZE) |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
143 i_assert(old_size == (size_t)-1 || |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
144 old_size <= malloc_usable_size(mem)); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
145 #endif |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 memcpy(new_mem, mem, mem_get_size(mem)); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
147 pool_system_clean_free(pool, mem); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
149 if (old_size < new_size) { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
150 /* clear new data */ |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
151 memset((char *)new_mem + old_size, 0, |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
152 new_size - old_size); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
155 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
156 return new_mem; |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
157 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
158 |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5378
diff
changeset
|
159 static void ATTR_NORETURN |
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5378
diff
changeset
|
160 pool_system_clean_clear(pool_t pool ATTR_UNUSED) |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
161 { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
162 i_panic("pool_system_clean_clear() must not be called"); |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
163 } |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
164 |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
165 static size_t |
6411
6a64e64fa3a3
Renamed __attr_*__ to ATTR_*. Renamed __attrs_used__ to ATTRS_DEFINED.
Timo Sirainen <tss@iki.fi>
parents:
5378
diff
changeset
|
166 pool_system_clean_get_max_easy_alloc_size(pool_t pool ATTR_UNUSED) |
5356
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
167 { |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
168 return 0; |
48fe4fe9ef64
Added system_clean_pool. default_pool is now set statically, so it can be
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
169 } |