Coverage Report

Created: 2025-11-24 06:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
buffer.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
lib-event.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
strfuncs.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
buffer.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