]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Fix post-filters processing
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 15 Jul 2016 08:50:06 +0000 (09:50 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 15 Jul 2016 08:50:06 +0000 (09:50 +0100)
src/libserver/symbols_cache.c
src/libserver/symbols_cache.h
src/libserver/task.c

index c38496ecc885c828c01584777a6bea2773c9bfac..61060e29c8c457b13a88d8386b882fe830c8cf3a 100644 (file)
@@ -1428,7 +1428,7 @@ rspamd_symbols_cache_process_settings (struct rspamd_task *task,
 
 gboolean
 rspamd_symbols_cache_process_symbols (struct rspamd_task * task,
-       struct symbols_cache *cache)
+       struct symbols_cache *cache, gint stage)
 {
        struct cache_item *item = NULL;
        struct cache_savepoint *checkpoint;
@@ -1478,10 +1478,10 @@ rspamd_symbols_cache_process_symbols (struct rspamd_task * task,
                        }
                }
 
-               if (all_done) {
+               if (all_done || stage == RSPAMD_TASK_STAGE_FILTERS) {
                        checkpoint->pass = RSPAMD_CACHE_PASS_FILTERS;
 
-                       return rspamd_symbols_cache_process_symbols (task, cache);
+                       return rspamd_symbols_cache_process_symbols (task, cache, stage);
                }
                break;
        case RSPAMD_CACHE_PASS_FILTERS:
@@ -1577,10 +1577,11 @@ rspamd_symbols_cache_process_symbols (struct rspamd_task * task,
                        }
                }
 
-               if (checkpoint->waitq->len == 0) {
+               if (checkpoint->waitq->len == 0 ||
+                               stage == RSPAMD_TASK_STAGE_POST_FILTERS) {
                        checkpoint->pass = RSPAMD_CACHE_PASS_POSTFILTERS;
 
-                       return rspamd_symbols_cache_process_symbols (task, cache);
+                       return rspamd_symbols_cache_process_symbols (task, cache, stage);
                }
                break;
 
index 290e754d09ba0bca52ca17333fb5794e3625c673..28695f446735917ecfcb287fe1540b4e5bcbb00c 100644 (file)
@@ -142,7 +142,7 @@ guint rspamd_symbols_cache_symbols_count (struct symbols_cache *cache);
  * @param saved_item pointer to currently saved item
  */
 gboolean rspamd_symbols_cache_process_symbols (struct rspamd_task *task,
-       struct symbols_cache *cache);
+       struct symbols_cache *cache, gint stage);
 
 /**
  * Validate cache items agains theirs weights defined in metrics
index 121e1bc64b76b2c1012db38e8c27a81340310971..2e250eaaa0ef17ca01c9e30b72e80d543341254a 100644 (file)
@@ -574,11 +574,13 @@ rspamd_task_process (struct rspamd_task *task, guint stages)
                break;
 
        case RSPAMD_TASK_STAGE_PRE_FILTERS:
-               rspamd_symbols_cache_process_symbols (task, task->cfg->cache);
+               rspamd_symbols_cache_process_symbols (task, task->cfg->cache,
+                               RSPAMD_TASK_STAGE_PRE_FILTERS);
                break;
 
        case RSPAMD_TASK_STAGE_FILTERS:
-               rspamd_symbols_cache_process_symbols (task, task->cfg->cache);
+               rspamd_symbols_cache_process_symbols (task, task->cfg->cache,
+                               RSPAMD_TASK_STAGE_FILTERS);
                break;
 
        case RSPAMD_TASK_STAGE_CLASSIFIERS:
@@ -598,7 +600,8 @@ rspamd_task_process (struct rspamd_task *task, guint stages)
                break;
 
        case RSPAMD_TASK_STAGE_POST_FILTERS:
-               rspamd_symbols_cache_process_symbols (task, task->cfg->cache);
+               rspamd_symbols_cache_process_symbols (task, task->cfg->cache,
+                               RSPAMD_TASK_STAGE_POST_FILTERS);
 
                if ((task->flags & RSPAMD_TASK_FLAG_LEARN_AUTO) &&
                                !RSPAMD_TASK_IS_EMPTY (task) &&