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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
b145040d5adb FreeBSD compile warning fix.
Timo Sirainen <tss@iki.fi>
parents: 7862
diff changeset
12 #ifdef HAVE_MALLOC_NP_H
b145040d5adb FreeBSD compile warning fix.
Timo Sirainen <tss@iki.fi>
parents: 7862
diff changeset
13 # include <malloc_np.h> /* for malloc_usable_size() with FreeBSD */
b145040d5adb FreeBSD compile warning fix.
Timo Sirainen <tss@iki.fi>
parents: 7862
diff changeset
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
512cea8832e5 Use 64bit alignment always
Timo Sirainen <tss@iki.fi>
parents: 5376
diff changeset
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
512cea8832e5 Use 64bit alignment always
Timo Sirainen <tss@iki.fi>
parents: 5376
diff changeset
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
512cea8832e5 Use 64bit alignment always
Timo Sirainen <tss@iki.fi>
parents: 5376
diff changeset
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
512cea8832e5 Use 64bit alignment always
Timo Sirainen <tss@iki.fi>
parents: 5376
diff changeset
112 *saved_size = size - EXTRA_SIZE_SPACE;
512cea8832e5 Use 64bit alignment always
Timo Sirainen <tss@iki.fi>
parents: 5376
diff changeset
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
512cea8832e5 Use 64bit alignment always
Timo Sirainen <tss@iki.fi>
parents: 5376
diff changeset
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 }