1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /*-
- * 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
|