diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 21:30:40 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 21:30:40 +0000 |
commit | 133a45c109da5310add55824db21af5239951f93 (patch) | |
tree | ba6ac4c0a950a0dda56451944315d66409923918 /src/libutil/mem_pool_internal.h | |
parent | Initial commit. (diff) | |
download | rspamd-133a45c109da5310add55824db21af5239951f93.tar.xz rspamd-133a45c109da5310add55824db21af5239951f93.zip |
Adding upstream version 3.8.1.upstream/3.8.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/libutil/mem_pool_internal.h')
-rw-r--r-- | src/libutil/mem_pool_internal.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/libutil/mem_pool_internal.h b/src/libutil/mem_pool_internal.h new file mode 100644 index 0000000..4fea839 --- /dev/null +++ b/src/libutil/mem_pool_internal.h @@ -0,0 +1,92 @@ +/*- + * Copyright 2019 Vsevolod Stakhov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef RSPAMD_MEM_POOL_INTERNAL_H +#define RSPAMD_MEM_POOL_INTERNAL_H + +/* + * Internal memory pool stuff + */ + +#define align_ptr(p, a) \ + ((guint8 *) ((uintptr_t) (p) + ((-(intptr_t) (p)) & ((a) -1)))) + +enum rspamd_mempool_chain_type { + RSPAMD_MEMPOOL_NORMAL = 0, + RSPAMD_MEMPOOL_SHARED, + RSPAMD_MEMPOOL_MAX +}; +#define ENTRY_LEN 128 +#define ENTRY_NELTS 64 + +struct entry_elt { + guint32 fragmentation; + guint32 leftover; +}; + +struct rspamd_mempool_entry_point { + gchar src[ENTRY_LEN]; + guint32 cur_suggestion; + guint32 cur_elts; + guint32 cur_vars; + struct entry_elt elts[ENTRY_NELTS]; +}; + +/** + * Destructors list item structure + */ +struct _pool_destructors { + rspamd_mempool_destruct_t func; /**< pointer to destructor */ + void *data; /**< data to free */ + const gchar *function; /**< function from which this destructor was added */ + const gchar *loc; /**< line number */ + struct _pool_destructors *next; +}; + + +struct rspamd_mempool_variable { + gpointer data; + rspamd_mempool_destruct_t dtor; +}; + +KHASH_INIT(rspamd_mempool_vars_hash, + guint32, struct rspamd_mempool_variable, 1, + kh_int_hash_func, kh_int_hash_equal); + +struct rspamd_mempool_specific { + struct _pool_chain *pools[RSPAMD_MEMPOOL_MAX]; + struct _pool_destructors *dtors_head, *dtors_tail; + GPtrArray *trash_stack; + khash_t(rspamd_mempool_vars_hash) * variables; + struct rspamd_mempool_entry_point *entry; + gsize elt_len; /**< size of an element */ + gsize used_memory; + guint wasted_memory; + gint flags; +}; + +/** + * Pool page structure + */ +struct _pool_chain { + guint8 *begin; /**< begin of pool chain block */ + guint8 *pos; /**< current start of free space in block */ + gsize slice_size; /**< length of block */ + struct _pool_chain *next; +}; + + +#endif |