Browse Source

[Minor] Allow to steal variables from the mempool

tags/3.8.0
Vsevolod Stakhov 5 months ago
parent
commit
18c4390ea0
No account linked to committer's email address
2 changed files with 33 additions and 0 deletions
  1. 25
    0
      src/libutil/mem_pool.c
  2. 8
    0
      src/libutil/mem_pool.h

+ 25
- 0
src/libutil/mem_pool.c View File

@@ -1226,6 +1226,31 @@ rspamd_mempool_get_variable(rspamd_mempool_t *pool, const gchar *name)
return NULL;
}

gpointer
rspamd_mempool_steal_variable(rspamd_mempool_t *pool, const gchar *name)
{
if (pool->priv->variables == NULL) {
return NULL;
}

khiter_t it;
gint hv = rspamd_cryptobox_fast_hash(name, strlen(name),
RSPAMD_MEMPOOL_VARS_HASH_SEED);

it = kh_get(rspamd_mempool_vars_hash, pool->priv->variables, hv);

if (it != kh_end(pool->priv->variables)) {
struct rspamd_mempool_variable *pvar;

pvar = &kh_val(pool->priv->variables, it);
kh_del(rspamd_mempool_vars_hash, pool->priv->variables, it);

return pvar->data;
}

return NULL;
}

void rspamd_mempool_remove_variable(rspamd_mempool_t *pool, const gchar *name)
{
if (pool->priv->variables != NULL) {

+ 8
- 0
src/libutil/mem_pool.h View File

@@ -389,6 +389,14 @@ void rspamd_mempool_set_variable(rspamd_mempool_t *pool,
*/
gpointer rspamd_mempool_get_variable(rspamd_mempool_t *pool,
const gchar *name);
/**
* Steal memory pool variable
* @param pool
* @param name
* @return
*/
gpointer rspamd_mempool_steal_variable(rspamd_mempool_t *pool,
const gchar *name);

/**
* Removes variable from memory pool

Loading…
Cancel
Save