summaryrefslogtreecommitdiffstats
path: root/src/libutil
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-08-27 17:31:29 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-08-27 17:36:29 +0100
commitb05c7c9edd197eea8aa11abcc416ea1463748f98 (patch)
tree06c165d661c28a1246cd23a3752bd172787701d7 /src/libutil
parentbbdc006ee99784d31d4b1df3290f1a63fd4086e5 (diff)
downloadrspamd-b05c7c9edd197eea8aa11abcc416ea1463748f98.tar.gz
rspamd-b05c7c9edd197eea8aa11abcc416ea1463748f98.zip
Add tags to rspamd_mempool.
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/logger.c2
-rw-r--r--src/libutil/map.c4
-rw-r--r--src/libutil/mem_pool.c22
-rw-r--r--src/libutil/mem_pool.h11
-rw-r--r--src/libutil/radix.c2
5 files changed, 35 insertions, 6 deletions
diff --git a/src/libutil/logger.c b/src/libutil/logger.c
index 1cf348489..87a8781e8 100644
--- a/src/libutil/logger.c
+++ b/src/libutil/logger.c
@@ -294,7 +294,7 @@ rspamd_set_logger (struct rspamd_config *cfg,
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);
}
diff --git a/src/libutil/map.c b/src/libutil/map.c
index 72f3a78b3..65ebb076e 100644
--- a/src/libutil/map.c
+++ b/src/libutil/map.c
@@ -471,7 +471,7 @@ rspamd_map_add (struct rspamd_config *cfg,
}
/* 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;
@@ -588,7 +588,7 @@ rspamd_map_add (struct rspamd_config *cfg,
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);
diff --git a/src/libutil/mem_pool.c b/src/libutil/mem_pool.c
index 81487e49c..084b4400b 100644
--- a/src/libutil/mem_pool.c
+++ b/src/libutil/mem_pool.c
@@ -29,6 +29,7 @@
#include "util.h"
#include "main.h"
#include "utlist.h"
+#include "ottery.h"
/* Sleep time for spin lock in nanoseconds */
#define MUTEX_SLEEP_TIME 10000000L
@@ -152,10 +153,13 @@ pool_chain_new_shared (gsize size)
* @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 */
@@ -215,6 +219,22 @@ rspamd_mempool_new (gsize size)
/* 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;
diff --git a/src/libutil/mem_pool.h b/src/libutil/mem_pool.h
index 1befd8445..42df30148 100644
--- a/src/libutil/mem_pool.h
+++ b/src/libutil/mem_pool.h
@@ -82,6 +82,14 @@ struct _pool_destructors {
};
/**
+ * Tag to use for logging purposes
+ */
+struct rspamd_mempool_tag {
+ gchar tagname[20]; /**< readable name */
+ gchar uid[20]; /**< unique id */
+};
+
+/**
* Memory pool type
*/
struct rspamd_mutex_s;
@@ -92,6 +100,7 @@ typedef struct memory_pool_s {
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;
/**
@@ -114,7 +123,7 @@ typedef struct memory_pool_stat_s {
* @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
diff --git a/src/libutil/radix.c b/src/libutil/radix.c
index 39fc39445..0d51d77f7 100644
--- a/src/libutil/radix.c
+++ b/src/libutil/radix.c
@@ -527,7 +527,7 @@ radix_create_compressed (void)
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;