return rspamd_mempool_entry_new (loc);
}
+
static struct _pool_chain *
rspamd_mempool_chain_new (gsize size, enum rspamd_mempool_chain_type pool_type)
{
optimal_size = 0;
gpointer map;
- g_return_val_if_fail (size > 0, NULL);
+ g_assert (size > 0);
if (pool_type == RSPAMD_MEMPOOL_SHARED) {
#if defined(HAVE_MMAP_ANON)
return new;
}
+static void *
+memory_pool_alloc_common (rspamd_mempool_t * pool, gsize size,
+ enum rspamd_mempool_chain_type pool_type)
+RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
+
static void *
memory_pool_alloc_common (rspamd_mempool_t * pool, gsize size,
enum rspamd_mempool_chain_type pool_type)
return tmp;
}
- return NULL;
+ g_abort ();
}
# else
# #define RSPAMD_ATTR_ALLOC_ALIGN(al)
# endif
+# if __has_attribute(returns_nonnull)
+# define RSPAMD_ATTR_RETURNS_NONNUL __attribute__((returns_nonnull))
+# else
+# #define RSPAMD_ATTR_RETURNS_NONNUL
+# endif
#else
#define RSPAMD_ATTR_ALLOC_SIZE(pos)
#define RSPAMD_ATTR_ALLOC_ALIGN(al)
+#define RSPAMD_ATTR_RETURNS_NONNUL
#endif
#define MEMPOOL_TAG_LEN 20
* @return pointer to allocated object
*/
void * rspamd_mempool_alloc (rspamd_mempool_t * pool, gsize size)
- RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MEM_ALIGNMENT);
+ RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
/**
* Get memory from temporary pool
* @param size bytes to allocate
* @return pointer to allocated object
*/
-void * rspamd_mempool_alloc_tmp (rspamd_mempool_t * pool, gsize size);
+void * rspamd_mempool_alloc_tmp (rspamd_mempool_t * pool, gsize size) RSPAMD_ATTR_RETURNS_NONNUL;
/**
* Get memory and set it to zero
* @return pointer to allocated object
*/
void * rspamd_mempool_alloc0 (rspamd_mempool_t * pool, gsize size)
- RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MEM_ALIGNMENT);
+ RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
/**
* Get memory and set it to zero
* @param size bytes to allocate
* @return pointer to allocated object
*/
-void * rspamd_mempool_alloc0_tmp (rspamd_mempool_t * pool, gsize size);
+void * rspamd_mempool_alloc0_tmp (rspamd_mempool_t * pool, gsize size) RSPAMD_ATTR_RETURNS_NONNUL;
/**
* Cleanup temporary data in pool
* @param size bytes to allocate
*/
void * rspamd_mempool_alloc_shared (rspamd_mempool_t * pool, gsize size)
- RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MEM_ALIGNMENT);
+ RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
void * rspamd_mempool_alloc0_shared (rspamd_mempool_t *pool, gsize size)
- RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MEM_ALIGNMENT);
+ RSPAMD_ATTR_ALLOC_SIZE(2) RSPAMD_ATTR_ALLOC_ALIGN(MEM_ALIGNMENT) RSPAMD_ATTR_RETURNS_NONNUL;
/**
* Add destructor callback to pool
* @param pool memory pool object