|
Electroneum
|
#include "util/locks.h"

Go to the source code of this file.
Classes | |
| struct | alloc_cache |
Macros | |
| #define | alloc_special_clean(x) (x)->id = 0; |
| #define | alloc_special_next(x) ((alloc_special_type*)((x)->entry.overflow_next)) |
| #define | alloc_set_special_next(x, y) ((x)->entry.overflow_next) = (struct lruhash_entry*)(y); |
| #define | ALLOC_SPECIAL_MAX 10 |
Typedefs | |
| typedef struct ub_packed_rrset_key | alloc_special_type |
Functions | |
| void | alloc_init (struct alloc_cache *alloc, struct alloc_cache *super, int thread_num) |
| void | alloc_clear (struct alloc_cache *alloc) |
| void | alloc_clear_special (struct alloc_cache *alloc) |
| alloc_special_type * | alloc_special_obtain (struct alloc_cache *alloc) |
| void | alloc_special_release (struct alloc_cache *alloc, alloc_special_type *mem) |
| uint64_t | alloc_get_id (struct alloc_cache *alloc) |
| size_t | alloc_get_mem (struct alloc_cache *alloc) |
| void | alloc_stats (struct alloc_cache *alloc) |
| struct regional * | alloc_reg_obtain (struct alloc_cache *alloc) |
| void | alloc_reg_release (struct alloc_cache *alloc, struct regional *r) |
| void | alloc_set_id_cleanup (struct alloc_cache *alloc, void(*cleanup)(void *), void *arg) |
This file contains memory allocation functions.
The reasons for this service are: o Avoid locking costs of getting global lock to call malloc(). o The packed rrset type needs to be kept on special freelists, so that they are reused for other packet rrset allocations.
Definition in file alloc.h.
| #define alloc_set_special_next | ( | x, | |
| y | |||
| ) | ((x)->entry.overflow_next) = (struct lruhash_entry*)(y); |
| #define alloc_special_clean | ( | x | ) | (x)->id = 0; |
| #define ALLOC_SPECIAL_MAX 10 |
| #define alloc_special_next | ( | x | ) | ((alloc_special_type*)((x)->entry.overflow_next)) |
| typedef struct ub_packed_rrset_key alloc_special_type |
| void alloc_clear | ( | struct alloc_cache * | alloc | ) |
Free the alloc. Pushes all the cached items into the super structure. Or deletes them if alloc->super is NULL. Does not free the alloc struct itself (it was also allocated by caller).
| alloc | is almost zeroed on exit (except some stats). |
| void alloc_clear_special | ( | struct alloc_cache * | alloc | ) |
Free the special alloced items. The rrset and message caches must be empty, there must be no more references to rrset pointers into the rrset cache.
| alloc | the special allocs are freed. |
| uint64_t alloc_get_id | ( | struct alloc_cache * | alloc | ) |
Set ID number of special type to a fresh new ID number. In case of ID number overflow, the rrset cache has to be cleared.
| alloc | the alloc cache |
| size_t alloc_get_mem | ( | struct alloc_cache * | alloc | ) |
Get memory size of alloc cache, alloc structure including special types.
| alloc | on what alloc. |
| void alloc_init | ( | struct alloc_cache * | alloc, |
| struct alloc_cache * | super, | ||
| int | thread_num | ||
| ) |
Init alloc (zeroes the struct).
| alloc | this parameter is allocated by the caller. |
| super | super to use (init that before with super_init). Pass this argument NULL to init the toplevel alloc structure. |
| thread_num | thread number for id creation of special type. |
| struct regional* alloc_reg_obtain | ( | struct alloc_cache * | alloc | ) |
Get a new regional for query states
| alloc | where to alloc it. |
| void alloc_reg_release | ( | struct alloc_cache * | alloc, |
| struct regional * | r | ||
| ) |
Put regional for query states back into alloc cache.
| alloc | where to alloc it. |
| r | regional to put back. |
| void alloc_set_id_cleanup | ( | struct alloc_cache * | alloc, |
| void(*)(void *) | cleanup, | ||
| void * | arg | ||
| ) |
Set cleanup on ID overflow callback function. This should remove all RRset ID references from the program. Clear the caches.
| alloc | the alloc |
| cleanup | the callback function, called as cleanup(arg). |
| arg | user argument to callback function. |
| alloc_special_type* alloc_special_obtain | ( | struct alloc_cache * | alloc | ) |
Get a new special_type element.
| alloc | where to alloc it. |
| void alloc_special_release | ( | struct alloc_cache * | alloc, |
| alloc_special_type * | mem | ||
| ) |
Return special_type back to pool. The block is cleaned up (zeroed) which also invalidates the ID inside.
| alloc | where to alloc it. |
| mem | block to free. |
| void alloc_stats | ( | struct alloc_cache * | alloc | ) |
Print debug information (statistics).
| alloc | on what alloc. |