* Create new hash in specified pool using shared memory
*/
rspamd_hash_t*
-rspamd_hash_new_shared (memory_pool_t *pool, GHashFunc hash_func, GEqualFunc key_equal_func)
+rspamd_hash_new_shared (memory_pool_t *pool, GHashFunc hash_func, GEqualFunc key_equal_func, gint size)
{
rspamd_hash_t* hash;
hash = memory_pool_alloc_shared (pool, sizeof (rspamd_hash_t));
- hash->size = HASH_TABLE_MIN_SIZE;
+ hash->size = size;
hash->nnodes = 0;
hash->hash_func = hash_func ? hash_func : g_direct_hash;
hash->key_equal_func = key_equal_func;
if (hash->shared) {
memory_pool_wunlock_rwlock (hash->lock);
}
-
- rspamd_hash_maybe_resize (hash);
-
+
+ if (!hash->shared) {
+ rspamd_hash_maybe_resize (hash);
+ }
}
/*
* @param key_equal_func pointer to function for comparing keys
* @return new rspamd_hash object
*/
-rspamd_hash_t* rspamd_hash_new_shared (memory_pool_t *pool, GHashFunc hash_func, GEqualFunc key_equal_func);
+rspamd_hash_t* rspamd_hash_new_shared (memory_pool_t *pool, GHashFunc hash_func, GEqualFunc key_equal_func, gint size);
/**
* Insert item in hash
rspamd->statfile_pool = statfile_pool_new (cfg->max_statfile_size);
/* Init counters */
- counters = rspamd_hash_new_shared (rspamd->server_pool, g_str_hash, g_str_equal);
+ counters = rspamd_hash_new_shared (rspamd->server_pool, g_str_hash, g_str_equal, 64);
for (i = 0; i < cfg->workers_number; i++) {
fork_worker (rspamd, listen_sock, TYPE_WORKER);
new->pool = memory_pool_new (memory_pool_get_size ());
new->max = max_size;
new->files = rspamd_hash_new (new->pool, g_str_hash, g_str_equal);
- new->maps = rspamd_hash_new_shared (new->pool, g_str_hash, g_str_equal);
+ new->maps = rspamd_hash_new_shared (new->pool, g_str_hash, g_str_equal, 64);
return new;
}