}
nsession = g_slice_alloc0 (sizeof (struct rspamd_controller_session));
- nsession->pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ nsession->pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
nsession->ctx = ctx;
nsession->from_addr = addr;
new = g_slice_alloc0 (sizeof (rspamd_io_dispatcher_t));
- new->pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ new->pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
if (tv != NULL) {
new->tv = rspamd_mempool_alloc (new->pool, sizeof (struct timeval));
memcpy (new->tv, tv, sizeof (struct timeval));
void
rspamd_init_cfg (struct rspamd_config *cfg, gboolean init_lua)
{
- cfg->cfg_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ cfg->cfg_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
rspamd_config_defaults (cfg);
if (init_lua) {
cache = g_slice_alloc0 (sizeof (struct symbols_cache));
cache->static_pool =
- rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
cache->items_by_symbol = g_hash_table_new (rspamd_str_hash,
rspamd_str_equal);
cache->items_by_order = g_ptr_array_new ();
new_task->time_real = rspamd_get_ticks ();
new_task->time_virtual = rspamd_get_virtual_ticks ();
- new_task->task_pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ new_task->task_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
new_task->results = g_hash_table_new (rspamd_str_hash, rspamd_str_equal);
rspamd_mempool_add_destructor (new_task->task_pool,
gsize size;
new = rspamd_mempool_alloc0 (cfg->cfg_pool, sizeof (rspamd_mmaped_file_ctx));
- new->pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ new->pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
new->lock = rspamd_mempool_get_mutex (new->pool);
new->mlock_ok = cfg->mlock_statfile_pool;
new->files = g_hash_table_new (g_direct_hash, g_direct_equal);
rspamd->logger = g_malloc (sizeof (rspamd_logger_t));
memset (rspamd->logger, 0, sizeof (rspamd_logger_t));
/* Small pool for interlocking */
- rspamd->logger->pool = rspamd_mempool_new (512);
+ rspamd->logger->pool = rspamd_mempool_new (512, NULL);
rspamd->logger->mtx = rspamd_mempool_get_mutex (rspamd->logger->pool);
}
}
/* Constant pool */
if (cfg->map_pool == NULL) {
- cfg->map_pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ cfg->map_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
}
new_map = rspamd_mempool_alloc0 (cfg->map_pool, sizeof (struct rspamd_map));
new_map->read_callback = read_callback;
new_map->map_data = hdata;
}
/* Temp pool */
- new_map->pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ new_map->pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
cfg->maps = g_list_prepend (cfg->maps, new_map);
#include "util.h"
#include "main.h"
#include "utlist.h"
+#include "ottery.h"
/* Sleep time for spin lock in nanoseconds */
#define MUTEX_SLEEP_TIME 10000000L
* @return new memory pool object
*/
rspamd_mempool_t *
-rspamd_mempool_new (gsize size)
+rspamd_mempool_new (gsize size, const gchar *tag)
{
rspamd_mempool_t *new;
gpointer map;
+ unsigned char uidbuf[10];
+ const gchar hexdigits[] = "0123456789abcdef";
+ unsigned i;
g_return_val_if_fail (size > 0, NULL);
/* Allocate statistic structure if it is not allocated before */
/* Set it upon first call of set variable */
new->variables = NULL;
new->elt_len = size;
+
+ if (tag) {
+ rspamd_strlcpy (new->tag.tagname, tag, sizeof (new->tag.tagname));
+ }
+ else {
+ new->tag.tagname[0] = '\0';
+ }
+
+ /* Generate new uid */
+ ottery_rand_bytes (uidbuf, sizeof (uidbuf));
+ for (i = 0; i < G_N_ELEMENTS (uidbuf); i ++) {
+ new->tag.uid[i * 2] = hexdigits[(uidbuf[i] >> 4) & 0xf];
+ new->tag.uid[i * 2 + 2] = hexdigits[uidbuf[i] & 0xf];
+ }
+ new->tag.uid[19] = '\0';
+
mem_pool_stat->pools_allocated++;
return new;
struct _pool_destructors *prev; /**< chain link */
};
+/**
+ * Tag to use for logging purposes
+ */
+struct rspamd_mempool_tag {
+ gchar tagname[20]; /**< readable name */
+ gchar uid[20]; /**< unique id */
+};
+
/**
* Memory pool type
*/
struct _pool_destructors *destructors; /**< destructors chain */
GHashTable *variables; /**< private memory pool variables */
gsize elt_len; /**< size of an element */
+ struct rspamd_mempool_tag tag; /**< memory pool tag */
} rspamd_mempool_t;
/**
* @param size size of pool's page
* @return new memory pool object
*/
-rspamd_mempool_t * rspamd_mempool_new (gsize size);
+rspamd_mempool_t *rspamd_mempool_new (gsize size, const gchar *tag);
/**
* Get memory from pool
return NULL;
}
- tree->pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ tree->pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
tree->size = 0;
tree->root = NULL;
static int
lua_mempool_create (lua_State *L)
{
- struct memory_pool_s *mempool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ()), **pmempool;
+ struct memory_pool_s *mempool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL), **pmempool;
if (mempool) {
pmempool = lua_newuserdata (L, sizeof (struct memory_pool_s *));
luaL_register (L, NULL, regexplib_m);
rspamd_lua_add_preload (L, "rspamd_regexp", lua_load_regexp);
- regexp_static_pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ regexp_static_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
}
}
if (start != NULL) {
- pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
hc = rspamd_mempool_alloc0 (pool, sizeof (*hc));
in = g_byte_array_sized_new (len);
g_byte_array_append (in, start, len);
static void
rspamd_init_main (struct rspamd_main *rspamd)
{
- rspamd->server_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ rspamd->server_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
rspamd_main->stat = rspamd_mempool_alloc0_shared (rspamd_main->server_pool,
sizeof (struct rspamd_stat));
/* Create rolling history */
{
chartable_module_ctx = g_malloc (sizeof (struct chartable_ctx));
- chartable_module_ctx->chartable_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ chartable_module_ctx->chartable_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
*ctx = (struct module_ctx *)chartable_module_ctx;
chartable_module_reconfig (struct rspamd_config *cfg)
{
rspamd_mempool_delete (chartable_module_ctx->chartable_pool);
- chartable_module_ctx->chartable_pool = rspamd_mempool_new (1024);
+ chartable_module_ctx->chartable_pool = rspamd_mempool_new (1024, NULL);
return chartable_module_config (cfg);
}
{
dkim_module_ctx = g_malloc0 (sizeof (struct dkim_ctx));
- dkim_module_ctx->dkim_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ dkim_module_ctx->dkim_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
*ctx = (struct module_ctx *)dkim_module_ctx;
memset (dkim_module_ctx, 0, sizeof (*dkim_module_ctx));
dkim_module_ctx->ctx = saved_ctx;
- dkim_module_ctx->dkim_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ dkim_module_ctx->dkim_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
return dkim_module_config (cfg);
}
{
fuzzy_module_ctx = g_malloc0 (sizeof (struct fuzzy_ctx));
- fuzzy_module_ctx->fuzzy_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ fuzzy_module_ctx->fuzzy_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
fuzzy_module_ctx->cfg = cfg;
*ctx = (struct module_ctx *)fuzzy_module_ctx;
rspamd_mempool_delete (fuzzy_module_ctx->fuzzy_pool);
memset (fuzzy_module_ctx, 0, sizeof (*fuzzy_module_ctx));
fuzzy_module_ctx->ctx = saved_ctx;
- fuzzy_module_ctx->fuzzy_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ fuzzy_module_ctx->fuzzy_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
fuzzy_module_ctx->cfg = cfg;
return fuzzy_check_module_config (cfg);
{
regexp_module_ctx = g_malloc (sizeof (struct regexp_ctx));
- regexp_module_ctx->regexp_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ regexp_module_ctx->regexp_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
*ctx = (struct module_ctx *)regexp_module_ctx;
rspamd_mempool_delete (regexp_module_ctx->regexp_pool);
memset (regexp_module_ctx, 0, sizeof (*regexp_module_ctx));
regexp_module_ctx->ctx = saved_ctx;
- regexp_module_ctx->regexp_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ regexp_module_ctx->regexp_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
return regexp_module_config (cfg);
}
{
spf_module_ctx = g_malloc (sizeof (struct spf_ctx));
- spf_module_ctx->spf_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ spf_module_ctx->spf_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
*ctx = (struct module_ctx *)spf_module_ctx;
radix_destroy_compressed (spf_module_ctx->whitelist_ip);
memset (spf_module_ctx, 0, sizeof (*spf_module_ctx));
spf_module_ctx->ctx = saved_ctx;
- spf_module_ctx->spf_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ spf_module_ctx->spf_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
return spf_module_config (cfg);
}
surbl_module_ctx->use_redirector = 0;
surbl_module_ctx->suffixes = NULL;
- surbl_module_ctx->surbl_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ surbl_module_ctx->surbl_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
surbl_module_ctx->tld2_file = NULL;
surbl_module_ctx->whitelist_file = NULL;
/* Reinit module */
surbl_module_ctx->use_redirector = 0;
surbl_module_ctx->suffixes = NULL;
- surbl_module_ctx->surbl_pool = rspamd_mempool_new (
- rspamd_mempool_suggest_size ());
+ surbl_module_ctx->surbl_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
surbl_module_ctx->tld2_file = NULL;
surbl_module_ctx->whitelist_file = NULL;
ctx = worker->ctx;
session = g_slice_alloc0 (sizeof (struct smtp_proxy_session));
- session->pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ session->pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
session->sock = nfd;
type = g_quark_try_string ("smtp_proxy");
ctx = g_malloc0 (sizeof (struct smtp_worker_ctx));
- ctx->pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ ctx->pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
/* Set default values */
ctx->smtp_timeout_raw = 300000;
cfg = (struct rspamd_config *)g_malloc (sizeof (struct rspamd_config));
bzero (cfg, sizeof (struct rspamd_config));
- cfg->cfg_pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ cfg->cfg_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
cfg->dns_retransmits = 2;
cfg->dns_timeout = 0.5;
- pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
s = rspamd_session_create (pool, session_fin, NULL, NULL, NULL);
rspamd_http_test_func (void)
{
struct event_base *ev_base = event_init ();
- rspamd_mempool_t *pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ rspamd_mempool_t *pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
gpointer serv_key, client_key, peer_key;
struct rspamd_keypair_cache *c;
rspamd_mempool_mutex_t *mtx;
pid_t pid;
int ret;
- pool = rspamd_mempool_new (sizeof (TEST_BUF));
+ pool = rspamd_mempool_new (sizeof (TEST_BUF), NULL);
tmp = rspamd_mempool_alloc (pool, sizeof (TEST_BUF));
tmp2 = rspamd_mempool_alloc (pool, sizeof (TEST_BUF) * 2);
tmp3 = rspamd_mempool_alloc_shared (pool, sizeof (TEST_BUF));
rspamd_main = (struct rspamd_main *)g_malloc (sizeof (struct rspamd_main));
memset (rspamd_main, 0, sizeof (struct rspamd_main));
- rspamd_main->server_pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ rspamd_main->server_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
rspamd_main->cfg = (struct rspamd_config *)g_malloc (sizeof (struct rspamd_config));
cfg = rspamd_main->cfg;
memset (cfg, 0, sizeof (struct rspamd_config));
rspamd_init_cfg (cfg, FALSE);
- cfg->cfg_pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ cfg->cfg_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
cfg->log_type = RSPAMD_LOG_CONSOLE;
cfg->log_level = G_LOG_LEVEL_INFO;
cfg = (struct rspamd_config *)g_malloc (sizeof (struct rspamd_config));
bzero (cfg, sizeof (struct rspamd_config));
- cfg->cfg_pool = rspamd_mempool_new (rspamd_mempool_suggest_size ());
+ cfg->cfg_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), NULL);
cfg->dns_retransmits = 2;
cfg->dns_timeout = 0.5;
cfg->upstream_max_errors = 1;