]> source.dussan.org Git - rspamd.git/commitdiff
[Project] Add rspamd_mempool_notify_alloc function
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 23 Dec 2019 19:08:05 +0000 (19:08 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 23 Dec 2019 19:08:05 +0000 (19:08 +0000)
src/libutil/mem_pool.c
src/libutil/mem_pool.h

index 5e4d1fe1a414ca381c130c9d97cfd391785cc4e0..f2272fa7c82b520b99c0505f725916e45183b2b6 100644 (file)
@@ -441,6 +441,27 @@ memory_pool_alloc_common (rspamd_mempool_t * pool, gsize size,
                                                  const gchar *loc)
 RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
 
+
+void
+rspamd_mempool_notify_alloc_ (rspamd_mempool_t *pool, gsize size, const gchar *loc)
+{
+       GHashTable *debug_tbl = *(GHashTable **)(((guchar *)pool + sizeof (*pool)));
+       gpointer ptr;
+
+       if (G_UNLIKELY (pool->priv->flags & RSPAMD_MEMPOOL_DEBUG)) {
+               ptr = g_hash_table_lookup (debug_tbl, loc);
+
+               if (ptr) {
+                       ptr = GSIZE_TO_POINTER (GPOINTER_TO_SIZE (ptr) + size);
+               }
+               else {
+                       ptr = GSIZE_TO_POINTER (size);
+               }
+
+               g_hash_table_insert (debug_tbl, (gpointer) loc, ptr);
+       }
+}
+
 static void *
 memory_pool_alloc_common (rspamd_mempool_t * pool, gsize size,
                enum rspamd_mempool_chain_type pool_type, const gchar *loc)
@@ -454,19 +475,7 @@ memory_pool_alloc_common (rspamd_mempool_t * pool, gsize size,
                pool->priv->used_memory += size;
 
                if (G_UNLIKELY (pool->priv->flags & RSPAMD_MEMPOOL_DEBUG)) {
-                       GHashTable *debug_tbl = *(GHashTable **)(((guchar *)pool + sizeof (*pool)));
-                       gpointer ptr;
-
-                       ptr = g_hash_table_lookup (debug_tbl, loc);
-
-                       if (ptr) {
-                               ptr = GSIZE_TO_POINTER (GPOINTER_TO_SIZE (ptr) + size);
-                       }
-                       else {
-                               ptr = GSIZE_TO_POINTER (size);
-                       }
-
-                       g_hash_table_insert (debug_tbl, (gpointer)loc, ptr);
+                       rspamd_mempool_notify_alloc_ (pool, size, loc);
                }
 
                if (always_malloc && pool_type != RSPAMD_MEMPOOL_SHARED) {
index 773be33d3d9af0a9935a026a9f7b5345823959b5..1554edbd2e9128a5c35ce5e3b15d53ee97afeb8d 100644 (file)
@@ -154,6 +154,16 @@ RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MIN_MEM_ALIGNMENT) RSPAMD_ATTR
 #define rspamd_mempool_alloc(pool, size) \
        rspamd_mempool_alloc_((pool), (size), G_STRLOC)
 
+/**
+ * Notify external memory usage for memory pool
+ * @param pool
+ * @param size
+ * @param loc
+ */
+void rspamd_mempool_notify_alloc_ (rspamd_mempool_t *pool, gsize size, const gchar *loc);
+#define rspamd_mempool_notify_alloc(pool, size) \
+       rspamd_mempool_notify_alloc_((pool), (size), G_STRLOC)
+
 /**
  * Get memory and set it to zero
  * @param pool memory pool object