You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

mem_pool.h 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #ifndef RSPAMD_MEM_POOL_H
  2. #define RSPAMD_MEM_POOL_H
  3. #include <sys/types.h>
  4. #include <glib.h>
  5. typedef void (*pool_destruct_func)(void *ptr);
  6. struct _pool_chain {
  7. u_char *begin;
  8. u_char *pos;
  9. size_t len;
  10. struct _pool_chain *next;
  11. };
  12. struct _pool_chain_shared {
  13. u_char *begin;
  14. u_char *pos;
  15. size_t len;
  16. gint lock;
  17. struct _pool_chain_shared *next;
  18. };
  19. struct _pool_destructors {
  20. pool_destruct_func func;
  21. void *data;
  22. struct _pool_destructors *prev;
  23. };
  24. typedef struct memory_pool_s {
  25. struct _pool_chain *cur_pool;
  26. struct _pool_chain *first_pool;
  27. struct _pool_chain_shared *shared_pool;
  28. struct _pool_destructors *destructors;
  29. } memory_pool_t;
  30. typedef struct memory_pool_stat_s {
  31. size_t bytes_allocated;
  32. size_t chunks_allocated;
  33. size_t shared_chunks_allocated;
  34. size_t chunks_freed;
  35. } memory_pool_stat_t;
  36. memory_pool_t* memory_pool_new (size_t size);
  37. void* memory_pool_alloc (memory_pool_t* pool, size_t size);
  38. void* memory_pool_alloc0 (memory_pool_t* pool, size_t size);
  39. char* memory_pool_strdup (memory_pool_t* pool, const char *src);
  40. void memory_pool_add_destructor (memory_pool_t *pool, pool_destruct_func func, void *data);
  41. void* memory_pool_alloc_shared (memory_pool_t *pool, size_t size);
  42. void memory_pool_lock_shared (memory_pool_t *pool, void *pointer);
  43. void memory_pool_unlock_shared (memory_pool_t *pool, void *pointer);
  44. void memory_pool_delete (memory_pool_t* pool);
  45. void memory_pool_stat (memory_pool_stat_t *st);
  46. /* Get optimal pool size based on page size for this system */
  47. size_t memory_pool_get_size ();
  48. #define memory_pool_free(x) ((x)->len - ((x)->pos - (x)->begin))
  49. #endif