Coverage Report

Created: 2026-05-16 06:51

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
10.2k
#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
23.5M
  ((type *) p_malloc(pool, MALLOC_MULTIPLY((unsigned int)sizeof(type), (count))) + \
105
23.5M
   COMPILE_ERROR_IF_TRUE(sizeof(type) > UINT_MAX))
106
107
#define p_realloc_type(pool, mem, type, old_count, new_count) \
108
0
  ((type *) p_realloc(pool, mem, \
109
0
  /* NOLINTNEXTLINE(bugprone-sizeof-expression) */ \
110
0
   MALLOC_MULTIPLY((unsigned int)sizeof(type), (old_count)), \
111
0
   /* NOLINTNEXTLINE(bugprone-sizeof-expression) */ \
112
0
   MALLOC_MULTIPLY((unsigned int)sizeof(type), (new_count))) + \
113
0
    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
125M
{
118
125M
  if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE))
119
0
    i_panic("Trying to allocate %zu bytes", size);
120
121
125M
  return pool->v->malloc(pool, size);
122
125M
}
Unexecuted instantiation: fuzz-imap-bodystructure.c:p_malloc
imap-bodystructure.c:p_malloc
Line
Count
Source
117
63.8k
{
118
63.8k
  if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE))
119
0
    i_panic("Trying to allocate %zu bytes", size);
120
121
63.8k
  return pool->v->malloc(pool, size);
122
63.8k
}
imap-envelope.c:p_malloc
Line
Count
Source
117
8.14M
{
118
8.14M
  if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE))
119
0
    i_panic("Trying to allocate %zu bytes", size);
120
121
8.14M
  return pool->v->malloc(pool, size);
122
8.14M
}
imap-parser.c:p_malloc
Line
Count
Source
117
27.7M
{
118
27.7M
  if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE))
119
0
    i_panic("Trying to allocate %zu bytes", size);
120
121
27.7M
  return pool->v->malloc(pool, size);
122
27.7M
}
Unexecuted instantiation: imap-quote.c:p_malloc
Unexecuted instantiation: imap-arg.c:p_malloc
Unexecuted instantiation: message-part.c:p_malloc
Unexecuted instantiation: fuzzer.c:p_malloc
buffer.c:p_malloc
Line
Count
Source
117
30.5M
{
118
30.5M
  if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE))
119
0
    i_panic("Trying to allocate %zu bytes", size);
120
121
30.5M
  return pool->v->malloc(pool, size);
122
30.5M
}
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
istream-data.c:p_malloc
Line
Count
Source
117
5.81k
{
118
5.81k
  if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE))
119
0
    i_panic("Trying to allocate %zu bytes", size);
120
121
5.81k
  return pool->v->malloc(pool, size);
122
5.81k
}
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
465
{
118
465
  if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE))
119
0
    i_panic("Trying to allocate %zu bytes", size);
120
121
465
  return pool->v->malloc(pool, size);
122
465
}
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
10.2k
{
118
10.2k
  if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE))
119
0
    i_panic("Trying to allocate %zu bytes", size);
120
121
10.2k
  return pool->v->malloc(pool, size);
122
10.2k
}
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
59.2M
{
118
59.2M
  if (unlikely(size == 0 || size > POOL_MAX_ALLOC_SIZE))
119
0
    i_panic("Trying to allocate %zu bytes", size);
120
121
59.2M
  return pool->v->malloc(pool, size);
122
59.2M
}
Unexecuted instantiation: strnum.c:p_malloc
Unexecuted instantiation: time-util.c:p_malloc
Unexecuted instantiation: unichar.c:p_malloc
Unexecuted instantiation: unicode-break.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
86.1k
{
129
86.1k
  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
86.1k
  if (mem == NULL)
134
0
    return pool->v->malloc(pool, new_size);
135
136
86.1k
  return pool->v->realloc(pool, mem, old_size, new_size);
137
86.1k
}
Unexecuted instantiation: fuzz-imap-bodystructure.c:p_realloc
Unexecuted instantiation: imap-bodystructure.c:p_realloc
Unexecuted instantiation: imap-envelope.c:p_realloc
Unexecuted instantiation: imap-parser.c:p_realloc
Unexecuted instantiation: imap-quote.c:p_realloc
Unexecuted instantiation: imap-arg.c:p_realloc
Unexecuted instantiation: message-part.c:p_realloc
Unexecuted instantiation: fuzzer.c:p_realloc
buffer.c:p_realloc
Line
Count
Source
128
86.1k
{
129
86.1k
  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
86.1k
  if (mem == NULL)
134
0
    return pool->v->malloc(pool, new_size);
135
136
86.1k
  return pool->v->realloc(pool, mem, old_size, new_size);
137
86.1k
}
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-break.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
148k
  STMT_START { \
143
148k
    p_free_internal(pool, mem); \
144
148k
    (mem) = NULL;     \
145
148k
  } STMT_END
146
78.0k
#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
148k
{
150
148k
  if (mem != NULL)
151
93.1k
    pool->v->free(pool, mem);
152
148k
}
Unexecuted instantiation: fuzz-imap-bodystructure.c:p_free_internal
Unexecuted instantiation: imap-bodystructure.c:p_free_internal
Unexecuted instantiation: imap-envelope.c:p_free_internal
imap-parser.c:p_free_internal
Line
Count
Source
149
5.81k
{
150
5.81k
  if (mem != NULL)
151
5.81k
    pool->v->free(pool, mem);
152
5.81k
}
Unexecuted instantiation: imap-quote.c:p_free_internal
Unexecuted instantiation: imap-arg.c:p_free_internal
Unexecuted instantiation: message-part.c:p_free_internal
Unexecuted instantiation: fuzzer.c:p_free_internal
buffer.c:p_free_internal
Line
Count
Source
149
71.0k
{
150
71.0k
  if (mem != NULL)
151
71.0k
    pool->v->free(pool, mem);
152
71.0k
}
data-stack.c:p_free_internal
Line
Count
Source
149
54
{
150
54
  if (mem != NULL)
151
54
    pool->v->free(pool, mem);
152
54
}
Unexecuted instantiation: event-log.c:p_free_internal
failures.c:p_free_internal
Line
Count
Source
149
15.7k
{
150
15.7k
  if (mem != NULL)
151
0
    pool->v->free(pool, mem);
152
15.7k
}
Unexecuted instantiation: fd-util.c:p_free_internal
hostpid.c:p_free_internal
Line
Count
Source
149
15.7k
{
150
15.7k
  if (mem != NULL)
151
3.94k
    pool->v->free(pool, mem);
152
15.7k
}
Unexecuted instantiation: imem.c:p_free_internal
Unexecuted instantiation: iostream-pump.c:p_free_internal
istream.c:p_free_internal
Line
Count
Source
149
5.81k
{
150
5.81k
  if (mem != NULL)
151
0
    pool->v->free(pool, mem);
152
5.81k
}
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
1.09k
{
150
1.09k
  if (mem != NULL)
151
629
    pool->v->free(pool, mem);
152
1.09k
}
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
process-title.c:p_free_internal
Line
Count
Source
149
3.94k
{
150
3.94k
  if (mem != NULL)
151
0
    pool->v->free(pool, mem);
152
3.94k
}
Unexecuted instantiation: priorityq.c:p_free_internal
Unexecuted instantiation: randgen.c:p_free_internal
Unexecuted instantiation: rand.c:p_free_internal
restrict-access.c:p_free_internal
Line
Count
Source
149
3.94k
{
150
3.94k
  if (mem != NULL)
151
0
    pool->v->free(pool, mem);
152
3.94k
}
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-break.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
ipwd.c:p_free_internal
Line
Count
Source
149
7.89k
{
150
7.89k
  if (mem != NULL)
151
0
    pool->v->free(pool, mem);
152
7.89k
}
iostream.c:p_free_internal
Line
Count
Source
149
17.4k
{
150
17.4k
  if (mem != NULL)
151
11.6k
    pool->v->free(pool, mem);
152
17.4k
}
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-bodystructure.c:p_clear
Unexecuted instantiation: imap-bodystructure.c:p_clear
Unexecuted instantiation: imap-envelope.c:p_clear
Unexecuted instantiation: imap-parser.c:p_clear
Unexecuted instantiation: imap-quote.c:p_clear
Unexecuted instantiation: imap-arg.c:p_clear
Unexecuted instantiation: message-part.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-break.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
86.1k
{
161
86.1k
  return pool->v->get_max_easy_alloc_size(pool);
162
86.1k
}
Unexecuted instantiation: fuzz-imap-bodystructure.c:p_get_max_easy_alloc_size
Unexecuted instantiation: imap-bodystructure.c:p_get_max_easy_alloc_size
Unexecuted instantiation: imap-envelope.c:p_get_max_easy_alloc_size
Unexecuted instantiation: imap-parser.c:p_get_max_easy_alloc_size
Unexecuted instantiation: imap-quote.c:p_get_max_easy_alloc_size
Unexecuted instantiation: imap-arg.c:p_get_max_easy_alloc_size
Unexecuted instantiation: message-part.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
86.1k
{
161
86.1k
  return pool->v->get_max_easy_alloc_size(pool);
162
86.1k
}
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-break.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-bodystructure.c:pool_get_name
Unexecuted instantiation: imap-bodystructure.c:pool_get_name
Unexecuted instantiation: imap-envelope.c:pool_get_name
Unexecuted instantiation: imap-parser.c:pool_get_name
Unexecuted instantiation: imap-quote.c:pool_get_name
Unexecuted instantiation: imap-arg.c:pool_get_name
Unexecuted instantiation: message-part.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-break.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-bodystructure.c:pool_ref
Unexecuted instantiation: imap-bodystructure.c:pool_ref
Unexecuted instantiation: imap-envelope.c:pool_ref
Unexecuted instantiation: imap-parser.c:pool_ref
Unexecuted instantiation: imap-quote.c:pool_ref
Unexecuted instantiation: imap-arg.c:pool_ref
Unexecuted instantiation: message-part.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-break.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
10.2k
{
176
10.2k
  if (*pool != NULL)
177
10.2k
    (*pool)->v->unref(pool);
178
10.2k
}
fuzz-imap-bodystructure.c:pool_unref
Line
Count
Source
175
3.94k
{
176
3.94k
  if (*pool != NULL)
177
3.94k
    (*pool)->v->unref(pool);
178
3.94k
}
Unexecuted instantiation: imap-bodystructure.c:pool_unref
Unexecuted instantiation: imap-envelope.c:pool_unref
imap-parser.c:pool_unref
Line
Count
Source
175
5.81k
{
176
5.81k
  if (*pool != NULL)
177
5.81k
    (*pool)->v->unref(pool);
178
5.81k
}
Unexecuted instantiation: imap-quote.c:pool_unref
Unexecuted instantiation: imap-arg.c:pool_unref
Unexecuted instantiation: message-part.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
lib-event.c:pool_unref
Line
Count
Source
175
465
{
176
465
  if (*pool != NULL)
177
465
    (*pool)->v->unref(pool);
178
465
}
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-break.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