/src/dovecot/src/lib/mempool.h
Line | Count | Source |
1 | | #ifndef MEMPOOL_H |
2 | | #define MEMPOOL_H |
3 | | |
4 | | #include "macros.h" |
5 | | |
6 | | /* When DEBUG is enabled, Dovecot warns whenever a memory pool is grown. |
7 | | This is done so that the initial pool size could be set large enough so that |
8 | | it wouldn't grow in normal use. For some memory pools it's too difficult |
9 | | to calculate a good initial size, so this prefix should be used with those |
10 | | pools to disable the warning. */ |
11 | 1 | #define MEMPOOL_GROWING "GROWING-" |
12 | | |
13 | | /* The maximum allocation size that's allowed. Anything larger than that |
14 | | will panic. No pool ever should need more than 4kB of overhead per |
15 | | allocation. */ |
16 | | #define POOL_MAX_ALLOC_SIZE (SSIZE_T_MAX - 4096) |
17 | | |
18 | | /* Memory allocated and reallocated (the new data in it) in pools is always |
19 | | zeroed, it will cost only a few CPU cycles and may well save some debug |
20 | | time. */ |
21 | | |
22 | | typedef struct pool *pool_t; |
23 | | |
24 | | struct pool_vfuncs { |
25 | | const char *(*get_name)(pool_t pool); |
26 | | |
27 | | void (*ref)(pool_t pool); |
28 | | void (*unref)(pool_t *pool); |
29 | | |
30 | | void *(*malloc)(pool_t pool, size_t size) ATTR_RETURNS_NONNULL; |
31 | | void (*free)(pool_t pool, void *mem); |
32 | | |
33 | | /* memory in old_size..new_size will be zeroed */ |
34 | | void *(*realloc)(pool_t pool, void *mem, |
35 | | size_t old_size, size_t new_size) |
36 | | ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL; |
37 | | |
38 | | /* Frees all the memory in pool. NOTE: system_pool doesn't support |
39 | | this and crashes if it's used */ |
40 | | void (*clear)(pool_t pool); |
41 | | |
42 | | /* Returns the maximum amount of bytes that can be allocated with |
43 | | minimal trouble. If there's no such concept, always returns 0. */ |
44 | | size_t (*get_max_easy_alloc_size)(pool_t pool); |
45 | | }; |
46 | | |
47 | | struct pool { |
48 | | const struct pool_vfuncs *v; |
49 | | ARRAY(pool_t) external_refs; |
50 | | |
51 | | bool alloconly_pool:1; |
52 | | bool datastack_pool:1; |
53 | | }; |
54 | | |
55 | | /* system_pool uses calloc() + realloc() + free() */ |
56 | | extern pool_t system_pool; |
57 | | extern struct pool static_system_pool; |
58 | | |
59 | | /* memory allocated from data_stack is valid only until next t_pop() call. |
60 | | No checks are performed. */ |
61 | | extern pool_t unsafe_data_stack_pool; |
62 | | |
63 | | /* null_pool can be used to have a memory pool where referencing and |
64 | | unreferencing it are ignored. Any attempt to allocate memory from it will |
65 | | panic. */ |
66 | | extern pool_t null_pool; |
67 | | |
68 | | /* Create a new alloc-only pool. Note that `size' specifies the initial |
69 | | malloc()ed block size, part of it is used internally. */ |
70 | | pool_t pool_alloconly_create(const char *name, size_t size); |
71 | | /* Like alloconly pool, but clear the memory before freeing it. The idea is |
72 | | that you could allocate memory for storing sensitive information from this |
73 | | pool, and be sure that it gets cleared from the memory when it's no longer |
74 | | needed. */ |
75 | | pool_t pool_alloconly_create_clean(const char *name, size_t size); |
76 | | |
77 | | /* When allocating memory from returned pool, the data stack frame must be |
78 | | the same as it was when calling this function. pool_unref() also checks |
79 | | that the stack frame is the same. This should make it quite safe to use. */ |
80 | | pool_t pool_datastack_create(void); |
81 | | |
82 | | /* Create new alloc pool. This is very similar to system pool, but it |
83 | | will deallocate all memory on deinit. */ |
84 | | pool_t pool_allocfree_create(const char *name); |
85 | | |
86 | | /* Like alloc pool, but all memory is cleaned before freeing. |
87 | | See pool_alloconly_create_clean. */ |
88 | | pool_t pool_allocfree_create_clean(const char *name); |
89 | | |
90 | | /* Similar to nearest_power(), but try not to exceed buffer's easy |
91 | | allocation size. If you don't have any explicit minimum size, use |
92 | | old_size + 1. */ |
93 | | size_t pool_get_exp_grown_size(pool_t pool, size_t old_size, size_t min_size); |
94 | | |
95 | | /* Reference another memory pool in the given pool. This call also increases |
96 | | the ref_pool's reference count. When the pool is freed, the referenced |
97 | | memory pools are also unreferenced. */ |
98 | | void pool_add_external_ref(pool_t pool, pool_t ref_pool); |
99 | | |
100 | | /* We require sizeof(type) to be <= UINT_MAX. This allows compiler to optimize |
101 | | away the entire MALLOC_MULTIPLY() call on 64bit systems. */ |
102 | | #define p_new(pool, type, count) \ |
103 | | /* NOLINTNEXTLINE(bugprone-sizeof-expression) */ \ |
104 | 1.12k | ((type *) p_malloc(pool, MALLOC_MULTIPLY((unsigned int)sizeof(type), (count))) + \ |
105 | 1.12k | COMPILE_ERROR_IF_TRUE(sizeof(type) > UINT_MAX)) |
106 | | |
107 | | #define p_realloc_type(pool, mem, type, old_count, new_count) \ |
108 | | ((type *) p_realloc(pool, mem, \ |
109 | | /* NOLINTNEXTLINE(bugprone-sizeof-expression) */ \ |
110 | | MALLOC_MULTIPLY((unsigned int)sizeof(type), (old_count)), \ |
111 | | /* NOLINTNEXTLINE(bugprone-sizeof-expression) */ \ |
112 | | MALLOC_MULTIPLY((unsigned int)sizeof(type), (new_count))) + \ |
113 | | COMPILE_ERROR_IF_TRUE(sizeof(type) > UINT_MAX)) |
114 | | |
115 | | static inline void * ATTR_MALLOC ATTR_RETURNS_NONNULL |
116 | | p_malloc(pool_t pool, size_t size) |
117 | 2.27k | { |
118 | 2.27k | if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE)) |
119 | 0 | i_panic("Trying to allocate %zu bytes", size); |
120 | | |
121 | 2.27k | return pool->v->malloc(pool, size); |
122 | 2.27k | } Unexecuted instantiation: fuzz-imap-utf7.c:p_malloc Unexecuted instantiation: imap-utf7.c:p_malloc Unexecuted instantiation: fuzzer.c:p_malloc Line | Count | Source | 117 | 2.25k | { | 118 | 2.25k | if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE)) | 119 | 0 | i_panic("Trying to allocate %zu bytes", size); | 120 | | | 121 | 2.25k | return pool->v->malloc(pool, size); | 122 | 2.25k | } |
Unexecuted instantiation: data-stack.c:p_malloc Unexecuted instantiation: event-log.c:p_malloc Unexecuted instantiation: failures.c:p_malloc Unexecuted instantiation: fd-util.c:p_malloc Unexecuted instantiation: hostpid.c:p_malloc Unexecuted instantiation: imem.c:p_malloc Unexecuted instantiation: iostream-pump.c:p_malloc Unexecuted instantiation: istream.c:p_malloc Unexecuted instantiation: istream-data.c:p_malloc Unexecuted instantiation: ioloop.c:p_malloc Unexecuted instantiation: ioloop-notify-inotify.c:p_malloc Unexecuted instantiation: ioloop-epoll.c:p_malloc Unexecuted instantiation: lib.c:p_malloc Line | Count | Source | 117 | 1 | { | 118 | 1 | if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE)) | 119 | 0 | i_panic("Trying to allocate %zu bytes", size); | 120 | | | 121 | 1 | return pool->v->malloc(pool, size); | 122 | 1 | } |
Unexecuted instantiation: lib-signals.c:p_malloc Unexecuted instantiation: memarea.c:p_malloc Unexecuted instantiation: mempool.c:p_malloc mempool-alloconly.c:p_malloc Line | Count | Source | 117 | 1 | { | 118 | 1 | if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE)) | 119 | 0 | i_panic("Trying to allocate %zu bytes", size); | 120 | | | 121 | 1 | return pool->v->malloc(pool, size); | 122 | 1 | } |
Unexecuted instantiation: mempool-datastack.c:p_malloc Unexecuted instantiation: mempool-system.c:p_malloc Unexecuted instantiation: mempool-unsafe-datastack.c:p_malloc Unexecuted instantiation: net.c:p_malloc Unexecuted instantiation: ostream.c:p_malloc Unexecuted instantiation: ostream-file.c:p_malloc Unexecuted instantiation: path-util.c:p_malloc Unexecuted instantiation: printf-format-fix.c:p_malloc Unexecuted instantiation: process-title.c:p_malloc Unexecuted instantiation: priorityq.c:p_malloc Unexecuted instantiation: randgen.c:p_malloc Unexecuted instantiation: rand.c:p_malloc Unexecuted instantiation: restrict-access.c:p_malloc Unexecuted instantiation: safe-memset.c:p_malloc Unexecuted instantiation: sendfile-util.c:p_malloc Unexecuted instantiation: sleep.c:p_malloc Unexecuted instantiation: str.c:p_malloc Unexecuted instantiation: strescape.c:p_malloc Line | Count | Source | 117 | 25 | { | 118 | 25 | if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE)) | 119 | 0 | i_panic("Trying to allocate %zu bytes", size); | 120 | | | 121 | 25 | return pool->v->malloc(pool, size); | 122 | 25 | } |
Unexecuted instantiation: strnum.c:p_malloc Unexecuted instantiation: time-util.c:p_malloc Unexecuted instantiation: unichar.c:p_malloc Unexecuted instantiation: unicode-data-tables.c:p_malloc Unexecuted instantiation: unicode-transform.c:p_malloc Unexecuted instantiation: write-full.c:p_malloc Unexecuted instantiation: array.c:p_malloc Unexecuted instantiation: backtrace-string.c:p_malloc Unexecuted instantiation: bits.c:p_malloc Unexecuted instantiation: env-util.c:p_malloc Unexecuted instantiation: event-filter.c:p_malloc Unexecuted instantiation: event-filter-lexer.c:p_malloc Unexecuted instantiation: event-filter-parser.c:p_malloc Unexecuted instantiation: hash.c:p_malloc Unexecuted instantiation: ipwd.c:p_malloc Unexecuted instantiation: iostream.c:p_malloc Unexecuted instantiation: istream-file.c:p_malloc Unexecuted instantiation: ioloop-iolist.c:p_malloc Unexecuted instantiation: ioloop-notify-fd.c:p_malloc Unexecuted instantiation: primes.c:p_malloc Unexecuted instantiation: str-parse.c:p_malloc Unexecuted instantiation: wildcard-match.c:p_malloc |
123 | | |
124 | | /* For allocfree and system pools you can use SIZE_MAX |
125 | | to indicate that you have no knowledge of the old size. */ |
126 | | static inline void * ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL |
127 | | p_realloc(pool_t pool, void *mem, size_t old_size, size_t new_size) |
128 | 3.83k | { |
129 | 3.83k | if (unlikely(new_size == 0 || new_size > POOL_MAX_ALLOC_SIZE)) |
130 | 0 | i_panic("Trying to reallocate %zu -> %zu bytes", |
131 | 0 | old_size, new_size); |
132 | | |
133 | 3.83k | if (mem == NULL) |
134 | 0 | return pool->v->malloc(pool, new_size); |
135 | | |
136 | 3.83k | return pool->v->realloc(pool, mem, old_size, new_size); |
137 | 3.83k | } Unexecuted instantiation: fuzz-imap-utf7.c:p_realloc Unexecuted instantiation: imap-utf7.c:p_realloc Unexecuted instantiation: fuzzer.c:p_realloc Line | Count | Source | 128 | 3.83k | { | 129 | 3.83k | if (unlikely(new_size == 0 || new_size > POOL_MAX_ALLOC_SIZE)) | 130 | 0 | i_panic("Trying to reallocate %zu -> %zu bytes", | 131 | 0 | old_size, new_size); | 132 | | | 133 | 3.83k | if (mem == NULL) | 134 | 0 | return pool->v->malloc(pool, new_size); | 135 | | | 136 | 3.83k | return pool->v->realloc(pool, mem, old_size, new_size); | 137 | 3.83k | } |
Unexecuted instantiation: data-stack.c:p_realloc Unexecuted instantiation: event-log.c:p_realloc Unexecuted instantiation: failures.c:p_realloc Unexecuted instantiation: fd-util.c:p_realloc Unexecuted instantiation: hostpid.c:p_realloc Unexecuted instantiation: imem.c:p_realloc Unexecuted instantiation: iostream-pump.c:p_realloc Unexecuted instantiation: istream.c:p_realloc Unexecuted instantiation: istream-data.c:p_realloc Unexecuted instantiation: ioloop.c:p_realloc Unexecuted instantiation: ioloop-notify-inotify.c:p_realloc Unexecuted instantiation: ioloop-epoll.c:p_realloc Unexecuted instantiation: lib.c:p_realloc Unexecuted instantiation: lib-event.c:p_realloc Unexecuted instantiation: lib-signals.c:p_realloc Unexecuted instantiation: memarea.c:p_realloc Unexecuted instantiation: mempool.c:p_realloc Unexecuted instantiation: mempool-alloconly.c:p_realloc Unexecuted instantiation: mempool-datastack.c:p_realloc Unexecuted instantiation: mempool-system.c:p_realloc Unexecuted instantiation: mempool-unsafe-datastack.c:p_realloc Unexecuted instantiation: net.c:p_realloc Unexecuted instantiation: ostream.c:p_realloc Unexecuted instantiation: ostream-file.c:p_realloc Unexecuted instantiation: path-util.c:p_realloc Unexecuted instantiation: printf-format-fix.c:p_realloc Unexecuted instantiation: process-title.c:p_realloc Unexecuted instantiation: priorityq.c:p_realloc Unexecuted instantiation: randgen.c:p_realloc Unexecuted instantiation: rand.c:p_realloc Unexecuted instantiation: restrict-access.c:p_realloc Unexecuted instantiation: safe-memset.c:p_realloc Unexecuted instantiation: sendfile-util.c:p_realloc Unexecuted instantiation: sleep.c:p_realloc Unexecuted instantiation: str.c:p_realloc Unexecuted instantiation: strescape.c:p_realloc Unexecuted instantiation: strfuncs.c:p_realloc Unexecuted instantiation: strnum.c:p_realloc Unexecuted instantiation: time-util.c:p_realloc Unexecuted instantiation: unichar.c:p_realloc Unexecuted instantiation: unicode-data-tables.c:p_realloc Unexecuted instantiation: unicode-transform.c:p_realloc Unexecuted instantiation: write-full.c:p_realloc Unexecuted instantiation: array.c:p_realloc Unexecuted instantiation: backtrace-string.c:p_realloc Unexecuted instantiation: bits.c:p_realloc Unexecuted instantiation: env-util.c:p_realloc Unexecuted instantiation: event-filter.c:p_realloc Unexecuted instantiation: event-filter-lexer.c:p_realloc Unexecuted instantiation: event-filter-parser.c:p_realloc Unexecuted instantiation: hash.c:p_realloc Unexecuted instantiation: ipwd.c:p_realloc Unexecuted instantiation: iostream.c:p_realloc Unexecuted instantiation: istream-file.c:p_realloc Unexecuted instantiation: ioloop-iolist.c:p_realloc Unexecuted instantiation: ioloop-notify-fd.c:p_realloc Unexecuted instantiation: primes.c:p_realloc Unexecuted instantiation: str-parse.c:p_realloc Unexecuted instantiation: wildcard-match.c:p_realloc |
138 | | |
139 | | /* Free the memory. p_free() and p_free_and_null() are now guaranteed to both |
140 | | set mem=NULL, so either one of them can be used. */ |
141 | | #define p_free(pool, mem) \ |
142 | 11 | STMT_START { \ |
143 | 11 | p_free_internal(pool, mem); \ |
144 | 11 | (mem) = NULL; \ |
145 | 11 | } STMT_END |
146 | 11 | #define p_free_and_null(pool, mem) p_free(pool, mem) |
147 | | |
148 | | static inline void p_free_internal(pool_t pool, void *mem) |
149 | 11 | { |
150 | 11 | if (mem != NULL) |
151 | 8 | pool->v->free(pool, mem); |
152 | 11 | } Unexecuted instantiation: fuzz-imap-utf7.c:p_free_internal Unexecuted instantiation: imap-utf7.c:p_free_internal Unexecuted instantiation: fuzzer.c:p_free_internal Unexecuted instantiation: buffer.c:p_free_internal Unexecuted instantiation: data-stack.c:p_free_internal Unexecuted instantiation: event-log.c:p_free_internal Unexecuted instantiation: failures.c:p_free_internal Unexecuted instantiation: fd-util.c:p_free_internal hostpid.c:p_free_internal Line | Count | Source | 149 | 2 | { | 150 | 2 | if (mem != NULL) | 151 | 0 | pool->v->free(pool, mem); | 152 | 2 | } |
Unexecuted instantiation: imem.c:p_free_internal Unexecuted instantiation: iostream-pump.c:p_free_internal Unexecuted instantiation: istream.c:p_free_internal Unexecuted instantiation: istream-data.c:p_free_internal Unexecuted instantiation: ioloop.c:p_free_internal Unexecuted instantiation: ioloop-notify-inotify.c:p_free_internal Unexecuted instantiation: ioloop-epoll.c:p_free_internal Unexecuted instantiation: lib.c:p_free_internal lib-event.c:p_free_internal Line | Count | Source | 149 | 9 | { | 150 | 9 | if (mem != NULL) | 151 | 8 | pool->v->free(pool, mem); | 152 | 9 | } |
Unexecuted instantiation: lib-signals.c:p_free_internal Unexecuted instantiation: memarea.c:p_free_internal Unexecuted instantiation: mempool.c:p_free_internal Unexecuted instantiation: mempool-alloconly.c:p_free_internal Unexecuted instantiation: mempool-datastack.c:p_free_internal Unexecuted instantiation: mempool-system.c:p_free_internal Unexecuted instantiation: mempool-unsafe-datastack.c:p_free_internal Unexecuted instantiation: net.c:p_free_internal Unexecuted instantiation: ostream.c:p_free_internal Unexecuted instantiation: ostream-file.c:p_free_internal Unexecuted instantiation: path-util.c:p_free_internal Unexecuted instantiation: printf-format-fix.c:p_free_internal Unexecuted instantiation: process-title.c:p_free_internal Unexecuted instantiation: priorityq.c:p_free_internal Unexecuted instantiation: randgen.c:p_free_internal Unexecuted instantiation: rand.c:p_free_internal Unexecuted instantiation: restrict-access.c:p_free_internal Unexecuted instantiation: safe-memset.c:p_free_internal Unexecuted instantiation: sendfile-util.c:p_free_internal Unexecuted instantiation: sleep.c:p_free_internal Unexecuted instantiation: str.c:p_free_internal Unexecuted instantiation: strescape.c:p_free_internal Unexecuted instantiation: strfuncs.c:p_free_internal Unexecuted instantiation: strnum.c:p_free_internal Unexecuted instantiation: time-util.c:p_free_internal Unexecuted instantiation: unichar.c:p_free_internal Unexecuted instantiation: unicode-data-tables.c:p_free_internal Unexecuted instantiation: unicode-transform.c:p_free_internal Unexecuted instantiation: write-full.c:p_free_internal Unexecuted instantiation: array.c:p_free_internal Unexecuted instantiation: backtrace-string.c:p_free_internal Unexecuted instantiation: bits.c:p_free_internal Unexecuted instantiation: env-util.c:p_free_internal Unexecuted instantiation: event-filter.c:p_free_internal Unexecuted instantiation: event-filter-lexer.c:p_free_internal Unexecuted instantiation: event-filter-parser.c:p_free_internal Unexecuted instantiation: hash.c:p_free_internal Unexecuted instantiation: ipwd.c:p_free_internal Unexecuted instantiation: iostream.c:p_free_internal Unexecuted instantiation: istream-file.c:p_free_internal Unexecuted instantiation: ioloop-iolist.c:p_free_internal Unexecuted instantiation: ioloop-notify-fd.c:p_free_internal Unexecuted instantiation: primes.c:p_free_internal Unexecuted instantiation: str-parse.c:p_free_internal Unexecuted instantiation: wildcard-match.c:p_free_internal |
153 | | |
154 | | static inline void p_clear(pool_t pool) |
155 | 0 | { |
156 | 0 | pool->v->clear(pool); |
157 | 0 | } Unexecuted instantiation: fuzz-imap-utf7.c:p_clear Unexecuted instantiation: imap-utf7.c:p_clear Unexecuted instantiation: fuzzer.c:p_clear Unexecuted instantiation: buffer.c:p_clear Unexecuted instantiation: data-stack.c:p_clear Unexecuted instantiation: event-log.c:p_clear Unexecuted instantiation: failures.c:p_clear Unexecuted instantiation: fd-util.c:p_clear Unexecuted instantiation: hostpid.c:p_clear Unexecuted instantiation: imem.c:p_clear Unexecuted instantiation: iostream-pump.c:p_clear Unexecuted instantiation: istream.c:p_clear Unexecuted instantiation: istream-data.c:p_clear Unexecuted instantiation: ioloop.c:p_clear Unexecuted instantiation: ioloop-notify-inotify.c:p_clear Unexecuted instantiation: ioloop-epoll.c:p_clear Unexecuted instantiation: lib.c:p_clear Unexecuted instantiation: lib-event.c:p_clear Unexecuted instantiation: lib-signals.c:p_clear Unexecuted instantiation: memarea.c:p_clear Unexecuted instantiation: mempool.c:p_clear Unexecuted instantiation: mempool-alloconly.c:p_clear Unexecuted instantiation: mempool-datastack.c:p_clear Unexecuted instantiation: mempool-system.c:p_clear Unexecuted instantiation: mempool-unsafe-datastack.c:p_clear Unexecuted instantiation: net.c:p_clear Unexecuted instantiation: ostream.c:p_clear Unexecuted instantiation: ostream-file.c:p_clear Unexecuted instantiation: path-util.c:p_clear Unexecuted instantiation: printf-format-fix.c:p_clear Unexecuted instantiation: process-title.c:p_clear Unexecuted instantiation: priorityq.c:p_clear Unexecuted instantiation: randgen.c:p_clear Unexecuted instantiation: rand.c:p_clear Unexecuted instantiation: restrict-access.c:p_clear Unexecuted instantiation: safe-memset.c:p_clear Unexecuted instantiation: sendfile-util.c:p_clear Unexecuted instantiation: sleep.c:p_clear Unexecuted instantiation: str.c:p_clear Unexecuted instantiation: strescape.c:p_clear Unexecuted instantiation: strfuncs.c:p_clear Unexecuted instantiation: strnum.c:p_clear Unexecuted instantiation: time-util.c:p_clear Unexecuted instantiation: unichar.c:p_clear Unexecuted instantiation: unicode-data-tables.c:p_clear Unexecuted instantiation: unicode-transform.c:p_clear Unexecuted instantiation: write-full.c:p_clear Unexecuted instantiation: array.c:p_clear Unexecuted instantiation: backtrace-string.c:p_clear Unexecuted instantiation: bits.c:p_clear Unexecuted instantiation: env-util.c:p_clear Unexecuted instantiation: event-filter.c:p_clear Unexecuted instantiation: event-filter-lexer.c:p_clear Unexecuted instantiation: event-filter-parser.c:p_clear Unexecuted instantiation: hash.c:p_clear Unexecuted instantiation: ipwd.c:p_clear Unexecuted instantiation: iostream.c:p_clear Unexecuted instantiation: istream-file.c:p_clear Unexecuted instantiation: ioloop-iolist.c:p_clear Unexecuted instantiation: ioloop-notify-fd.c:p_clear Unexecuted instantiation: primes.c:p_clear Unexecuted instantiation: str-parse.c:p_clear Unexecuted instantiation: wildcard-match.c:p_clear |
158 | | |
159 | | static inline size_t p_get_max_easy_alloc_size(pool_t pool) |
160 | 3.83k | { |
161 | 3.83k | return pool->v->get_max_easy_alloc_size(pool); |
162 | 3.83k | } Unexecuted instantiation: fuzz-imap-utf7.c:p_get_max_easy_alloc_size Unexecuted instantiation: imap-utf7.c:p_get_max_easy_alloc_size Unexecuted instantiation: fuzzer.c:p_get_max_easy_alloc_size Unexecuted instantiation: buffer.c:p_get_max_easy_alloc_size Unexecuted instantiation: data-stack.c:p_get_max_easy_alloc_size Unexecuted instantiation: event-log.c:p_get_max_easy_alloc_size Unexecuted instantiation: failures.c:p_get_max_easy_alloc_size Unexecuted instantiation: fd-util.c:p_get_max_easy_alloc_size Unexecuted instantiation: hostpid.c:p_get_max_easy_alloc_size Unexecuted instantiation: imem.c:p_get_max_easy_alloc_size Unexecuted instantiation: iostream-pump.c:p_get_max_easy_alloc_size Unexecuted instantiation: istream.c:p_get_max_easy_alloc_size Unexecuted instantiation: istream-data.c:p_get_max_easy_alloc_size Unexecuted instantiation: ioloop.c:p_get_max_easy_alloc_size Unexecuted instantiation: ioloop-notify-inotify.c:p_get_max_easy_alloc_size Unexecuted instantiation: ioloop-epoll.c:p_get_max_easy_alloc_size Unexecuted instantiation: lib.c:p_get_max_easy_alloc_size Unexecuted instantiation: lib-event.c:p_get_max_easy_alloc_size Unexecuted instantiation: lib-signals.c:p_get_max_easy_alloc_size Unexecuted instantiation: memarea.c:p_get_max_easy_alloc_size mempool.c:p_get_max_easy_alloc_size Line | Count | Source | 160 | 3.83k | { | 161 | 3.83k | return pool->v->get_max_easy_alloc_size(pool); | 162 | 3.83k | } |
Unexecuted instantiation: mempool-alloconly.c:p_get_max_easy_alloc_size Unexecuted instantiation: mempool-datastack.c:p_get_max_easy_alloc_size Unexecuted instantiation: mempool-system.c:p_get_max_easy_alloc_size Unexecuted instantiation: mempool-unsafe-datastack.c:p_get_max_easy_alloc_size Unexecuted instantiation: net.c:p_get_max_easy_alloc_size Unexecuted instantiation: ostream.c:p_get_max_easy_alloc_size Unexecuted instantiation: ostream-file.c:p_get_max_easy_alloc_size Unexecuted instantiation: path-util.c:p_get_max_easy_alloc_size Unexecuted instantiation: printf-format-fix.c:p_get_max_easy_alloc_size Unexecuted instantiation: process-title.c:p_get_max_easy_alloc_size Unexecuted instantiation: priorityq.c:p_get_max_easy_alloc_size Unexecuted instantiation: randgen.c:p_get_max_easy_alloc_size Unexecuted instantiation: rand.c:p_get_max_easy_alloc_size Unexecuted instantiation: restrict-access.c:p_get_max_easy_alloc_size Unexecuted instantiation: safe-memset.c:p_get_max_easy_alloc_size Unexecuted instantiation: sendfile-util.c:p_get_max_easy_alloc_size Unexecuted instantiation: sleep.c:p_get_max_easy_alloc_size Unexecuted instantiation: str.c:p_get_max_easy_alloc_size Unexecuted instantiation: strescape.c:p_get_max_easy_alloc_size Unexecuted instantiation: strfuncs.c:p_get_max_easy_alloc_size Unexecuted instantiation: strnum.c:p_get_max_easy_alloc_size Unexecuted instantiation: time-util.c:p_get_max_easy_alloc_size Unexecuted instantiation: unichar.c:p_get_max_easy_alloc_size Unexecuted instantiation: unicode-data-tables.c:p_get_max_easy_alloc_size Unexecuted instantiation: unicode-transform.c:p_get_max_easy_alloc_size Unexecuted instantiation: write-full.c:p_get_max_easy_alloc_size Unexecuted instantiation: array.c:p_get_max_easy_alloc_size Unexecuted instantiation: backtrace-string.c:p_get_max_easy_alloc_size Unexecuted instantiation: bits.c:p_get_max_easy_alloc_size Unexecuted instantiation: env-util.c:p_get_max_easy_alloc_size Unexecuted instantiation: event-filter.c:p_get_max_easy_alloc_size Unexecuted instantiation: event-filter-lexer.c:p_get_max_easy_alloc_size Unexecuted instantiation: event-filter-parser.c:p_get_max_easy_alloc_size Unexecuted instantiation: hash.c:p_get_max_easy_alloc_size Unexecuted instantiation: ipwd.c:p_get_max_easy_alloc_size Unexecuted instantiation: iostream.c:p_get_max_easy_alloc_size Unexecuted instantiation: istream-file.c:p_get_max_easy_alloc_size Unexecuted instantiation: ioloop-iolist.c:p_get_max_easy_alloc_size Unexecuted instantiation: ioloop-notify-fd.c:p_get_max_easy_alloc_size Unexecuted instantiation: primes.c:p_get_max_easy_alloc_size Unexecuted instantiation: str-parse.c:p_get_max_easy_alloc_size Unexecuted instantiation: wildcard-match.c:p_get_max_easy_alloc_size |
163 | | |
164 | | static inline const char *pool_get_name(pool_t pool) |
165 | 0 | { |
166 | 0 | return pool->v->get_name(pool); |
167 | 0 | } Unexecuted instantiation: fuzz-imap-utf7.c:pool_get_name Unexecuted instantiation: imap-utf7.c:pool_get_name Unexecuted instantiation: fuzzer.c:pool_get_name Unexecuted instantiation: buffer.c:pool_get_name Unexecuted instantiation: data-stack.c:pool_get_name Unexecuted instantiation: event-log.c:pool_get_name Unexecuted instantiation: failures.c:pool_get_name Unexecuted instantiation: fd-util.c:pool_get_name Unexecuted instantiation: hostpid.c:pool_get_name Unexecuted instantiation: imem.c:pool_get_name Unexecuted instantiation: iostream-pump.c:pool_get_name Unexecuted instantiation: istream.c:pool_get_name Unexecuted instantiation: istream-data.c:pool_get_name Unexecuted instantiation: ioloop.c:pool_get_name Unexecuted instantiation: ioloop-notify-inotify.c:pool_get_name Unexecuted instantiation: ioloop-epoll.c:pool_get_name Unexecuted instantiation: lib.c:pool_get_name Unexecuted instantiation: lib-event.c:pool_get_name Unexecuted instantiation: lib-signals.c:pool_get_name Unexecuted instantiation: memarea.c:pool_get_name Unexecuted instantiation: mempool.c:pool_get_name Unexecuted instantiation: mempool-alloconly.c:pool_get_name Unexecuted instantiation: mempool-datastack.c:pool_get_name Unexecuted instantiation: mempool-system.c:pool_get_name Unexecuted instantiation: mempool-unsafe-datastack.c:pool_get_name Unexecuted instantiation: net.c:pool_get_name Unexecuted instantiation: ostream.c:pool_get_name Unexecuted instantiation: ostream-file.c:pool_get_name Unexecuted instantiation: path-util.c:pool_get_name Unexecuted instantiation: printf-format-fix.c:pool_get_name Unexecuted instantiation: process-title.c:pool_get_name Unexecuted instantiation: priorityq.c:pool_get_name Unexecuted instantiation: randgen.c:pool_get_name Unexecuted instantiation: rand.c:pool_get_name Unexecuted instantiation: restrict-access.c:pool_get_name Unexecuted instantiation: safe-memset.c:pool_get_name Unexecuted instantiation: sendfile-util.c:pool_get_name Unexecuted instantiation: sleep.c:pool_get_name Unexecuted instantiation: str.c:pool_get_name Unexecuted instantiation: strescape.c:pool_get_name Unexecuted instantiation: strfuncs.c:pool_get_name Unexecuted instantiation: strnum.c:pool_get_name Unexecuted instantiation: time-util.c:pool_get_name Unexecuted instantiation: unichar.c:pool_get_name Unexecuted instantiation: unicode-data-tables.c:pool_get_name Unexecuted instantiation: unicode-transform.c:pool_get_name Unexecuted instantiation: write-full.c:pool_get_name Unexecuted instantiation: array.c:pool_get_name Unexecuted instantiation: backtrace-string.c:pool_get_name Unexecuted instantiation: bits.c:pool_get_name Unexecuted instantiation: env-util.c:pool_get_name Unexecuted instantiation: event-filter.c:pool_get_name Unexecuted instantiation: event-filter-lexer.c:pool_get_name Unexecuted instantiation: event-filter-parser.c:pool_get_name Unexecuted instantiation: hash.c:pool_get_name Unexecuted instantiation: ipwd.c:pool_get_name Unexecuted instantiation: iostream.c:pool_get_name Unexecuted instantiation: istream-file.c:pool_get_name Unexecuted instantiation: ioloop-iolist.c:pool_get_name Unexecuted instantiation: ioloop-notify-fd.c:pool_get_name Unexecuted instantiation: primes.c:pool_get_name Unexecuted instantiation: str-parse.c:pool_get_name Unexecuted instantiation: wildcard-match.c:pool_get_name |
168 | | |
169 | | static inline void pool_ref(pool_t pool) |
170 | 0 | { |
171 | 0 | pool->v->ref(pool); |
172 | 0 | } Unexecuted instantiation: fuzz-imap-utf7.c:pool_ref Unexecuted instantiation: imap-utf7.c:pool_ref Unexecuted instantiation: fuzzer.c:pool_ref Unexecuted instantiation: buffer.c:pool_ref Unexecuted instantiation: data-stack.c:pool_ref Unexecuted instantiation: event-log.c:pool_ref Unexecuted instantiation: failures.c:pool_ref Unexecuted instantiation: fd-util.c:pool_ref Unexecuted instantiation: hostpid.c:pool_ref Unexecuted instantiation: imem.c:pool_ref Unexecuted instantiation: iostream-pump.c:pool_ref Unexecuted instantiation: istream.c:pool_ref Unexecuted instantiation: istream-data.c:pool_ref Unexecuted instantiation: ioloop.c:pool_ref Unexecuted instantiation: ioloop-notify-inotify.c:pool_ref Unexecuted instantiation: ioloop-epoll.c:pool_ref Unexecuted instantiation: lib.c:pool_ref Unexecuted instantiation: lib-event.c:pool_ref Unexecuted instantiation: lib-signals.c:pool_ref Unexecuted instantiation: memarea.c:pool_ref Unexecuted instantiation: mempool.c:pool_ref Unexecuted instantiation: mempool-alloconly.c:pool_ref Unexecuted instantiation: mempool-datastack.c:pool_ref Unexecuted instantiation: mempool-system.c:pool_ref Unexecuted instantiation: mempool-unsafe-datastack.c:pool_ref Unexecuted instantiation: net.c:pool_ref Unexecuted instantiation: ostream.c:pool_ref Unexecuted instantiation: ostream-file.c:pool_ref Unexecuted instantiation: path-util.c:pool_ref Unexecuted instantiation: printf-format-fix.c:pool_ref Unexecuted instantiation: process-title.c:pool_ref Unexecuted instantiation: priorityq.c:pool_ref Unexecuted instantiation: randgen.c:pool_ref Unexecuted instantiation: rand.c:pool_ref Unexecuted instantiation: restrict-access.c:pool_ref Unexecuted instantiation: safe-memset.c:pool_ref Unexecuted instantiation: sendfile-util.c:pool_ref Unexecuted instantiation: sleep.c:pool_ref Unexecuted instantiation: str.c:pool_ref Unexecuted instantiation: strescape.c:pool_ref Unexecuted instantiation: strfuncs.c:pool_ref Unexecuted instantiation: strnum.c:pool_ref Unexecuted instantiation: time-util.c:pool_ref Unexecuted instantiation: unichar.c:pool_ref Unexecuted instantiation: unicode-data-tables.c:pool_ref Unexecuted instantiation: unicode-transform.c:pool_ref Unexecuted instantiation: write-full.c:pool_ref Unexecuted instantiation: array.c:pool_ref Unexecuted instantiation: backtrace-string.c:pool_ref Unexecuted instantiation: bits.c:pool_ref Unexecuted instantiation: env-util.c:pool_ref Unexecuted instantiation: event-filter.c:pool_ref Unexecuted instantiation: event-filter-lexer.c:pool_ref Unexecuted instantiation: event-filter-parser.c:pool_ref Unexecuted instantiation: hash.c:pool_ref Unexecuted instantiation: ipwd.c:pool_ref Unexecuted instantiation: iostream.c:pool_ref Unexecuted instantiation: istream-file.c:pool_ref Unexecuted instantiation: ioloop-iolist.c:pool_ref Unexecuted instantiation: ioloop-notify-fd.c:pool_ref Unexecuted instantiation: primes.c:pool_ref Unexecuted instantiation: str-parse.c:pool_ref Unexecuted instantiation: wildcard-match.c:pool_ref |
173 | | |
174 | | static inline void pool_unref(pool_t *pool) |
175 | 0 | { |
176 | 0 | if (*pool != NULL) |
177 | 0 | (*pool)->v->unref(pool); |
178 | 0 | } Unexecuted instantiation: fuzz-imap-utf7.c:pool_unref Unexecuted instantiation: imap-utf7.c:pool_unref Unexecuted instantiation: fuzzer.c:pool_unref Unexecuted instantiation: buffer.c:pool_unref Unexecuted instantiation: data-stack.c:pool_unref Unexecuted instantiation: event-log.c:pool_unref Unexecuted instantiation: failures.c:pool_unref Unexecuted instantiation: fd-util.c:pool_unref Unexecuted instantiation: hostpid.c:pool_unref Unexecuted instantiation: imem.c:pool_unref Unexecuted instantiation: iostream-pump.c:pool_unref Unexecuted instantiation: istream.c:pool_unref Unexecuted instantiation: istream-data.c:pool_unref Unexecuted instantiation: ioloop.c:pool_unref Unexecuted instantiation: ioloop-notify-inotify.c:pool_unref Unexecuted instantiation: ioloop-epoll.c:pool_unref Unexecuted instantiation: lib.c:pool_unref Unexecuted instantiation: lib-event.c:pool_unref Unexecuted instantiation: lib-signals.c:pool_unref Unexecuted instantiation: memarea.c:pool_unref Unexecuted instantiation: mempool.c:pool_unref Unexecuted instantiation: mempool-alloconly.c:pool_unref Unexecuted instantiation: mempool-datastack.c:pool_unref Unexecuted instantiation: mempool-system.c:pool_unref Unexecuted instantiation: mempool-unsafe-datastack.c:pool_unref Unexecuted instantiation: net.c:pool_unref Unexecuted instantiation: ostream.c:pool_unref Unexecuted instantiation: ostream-file.c:pool_unref Unexecuted instantiation: path-util.c:pool_unref Unexecuted instantiation: printf-format-fix.c:pool_unref Unexecuted instantiation: process-title.c:pool_unref Unexecuted instantiation: priorityq.c:pool_unref Unexecuted instantiation: randgen.c:pool_unref Unexecuted instantiation: rand.c:pool_unref Unexecuted instantiation: restrict-access.c:pool_unref Unexecuted instantiation: safe-memset.c:pool_unref Unexecuted instantiation: sendfile-util.c:pool_unref Unexecuted instantiation: sleep.c:pool_unref Unexecuted instantiation: str.c:pool_unref Unexecuted instantiation: strescape.c:pool_unref Unexecuted instantiation: strfuncs.c:pool_unref Unexecuted instantiation: strnum.c:pool_unref Unexecuted instantiation: time-util.c:pool_unref Unexecuted instantiation: unichar.c:pool_unref Unexecuted instantiation: unicode-data-tables.c:pool_unref Unexecuted instantiation: unicode-transform.c:pool_unref Unexecuted instantiation: write-full.c:pool_unref Unexecuted instantiation: array.c:pool_unref Unexecuted instantiation: backtrace-string.c:pool_unref Unexecuted instantiation: bits.c:pool_unref Unexecuted instantiation: env-util.c:pool_unref Unexecuted instantiation: event-filter.c:pool_unref Unexecuted instantiation: event-filter-lexer.c:pool_unref Unexecuted instantiation: event-filter-parser.c:pool_unref Unexecuted instantiation: hash.c:pool_unref Unexecuted instantiation: ipwd.c:pool_unref Unexecuted instantiation: iostream.c:pool_unref Unexecuted instantiation: istream-file.c:pool_unref Unexecuted instantiation: ioloop-iolist.c:pool_unref Unexecuted instantiation: ioloop-notify-fd.c:pool_unref Unexecuted instantiation: primes.c:pool_unref Unexecuted instantiation: str-parse.c:pool_unref Unexecuted instantiation: wildcard-match.c:pool_unref |
179 | | |
180 | | /* These functions are only for pools created with pool_alloconly_create(): */ |
181 | | |
182 | | /* Returns how much memory has been allocated from this pool. */ |
183 | | size_t pool_alloconly_get_total_used_size(pool_t pool); |
184 | | /* Returns how much system memory has been allocated for this pool. */ |
185 | | size_t pool_alloconly_get_total_alloc_size(pool_t pool); |
186 | | |
187 | | /* Returns how much memory has been allocated from this pool. */ |
188 | | size_t pool_allocfree_get_total_used_size(pool_t pool); |
189 | | /* Returns how much system memory has been allocated for this pool. */ |
190 | | size_t pool_allocfree_get_total_alloc_size(pool_t pool); |
191 | | |
192 | | /* private: */ |
193 | | void pool_system_free(pool_t pool, void *mem); |
194 | | void pool_external_refs_unref(pool_t pool); |
195 | | |
196 | | #endif |