]> source.dussan.org Git - rspamd.git/commitdiff
Do not store zeroes in hash table.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 25 Mar 2015 18:23:24 +0000 (18:23 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 25 Mar 2015 18:23:24 +0000 (18:23 +0000)
src/libserver/task.c

index 9ac66b65cfb7ead404602c148d6ce3ef7d0d08e0..e7a2c18afab8ed6e8c9c1d236125e64aba56e9d5 100644 (file)
@@ -457,15 +457,17 @@ rspamd_task_re_cache_add (struct rspamd_task *task, const gchar *re,
                guint value)
 {
        guint ret = RSPAMD_TASK_CACHE_NO_VALUE;
+       static const guint32 mask = 1 << 31;
        gpointer p;
 
        p = g_hash_table_lookup (task->re_cache, re);
 
        if (p != NULL) {
-               ret = GPOINTER_TO_INT (p);
+               ret = GPOINTER_TO_INT (p) & ~mask;
        }
 
-       g_hash_table_insert (task->re_cache, (gpointer)re, GINT_TO_POINTER (value));
+       g_hash_table_insert (task->re_cache, (gpointer)re,
+                       GINT_TO_POINTER (value | mask));
 
        return ret;
 }
@@ -474,12 +476,13 @@ guint
 rspamd_task_re_cache_check (struct rspamd_task *task, const gchar *re)
 {
        guint ret = RSPAMD_TASK_CACHE_NO_VALUE;
+       static const guint32 mask = 1 << 31;
        gpointer p;
 
        p = g_hash_table_lookup (task->re_cache, re);
 
        if (p != NULL) {
-               ret = GPOINTER_TO_INT (p);
+               ret = GPOINTER_TO_INT (p) & ~mask;
        }
 
        return ret;