summaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-07-15 09:50:06 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-07-15 09:50:06 +0100
commit774b55a4705d9e303d5601181ff8779738a2d8e8 (patch)
treebc9a6dd3af394f589505c080869cca47cf775ca8 /src/libserver
parent7fcce899c3ab7c2c10d55d523b50cea7355883f5 (diff)
downloadrspamd-774b55a4705d9e303d5601181ff8779738a2d8e8.tar.gz
rspamd-774b55a4705d9e303d5601181ff8779738a2d8e8.zip
[Fix] Fix post-filters processing
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/symbols_cache.c11
-rw-r--r--src/libserver/symbols_cache.h2
-rw-r--r--src/libserver/task.c9
3 files changed, 13 insertions, 9 deletions
diff --git a/src/libserver/symbols_cache.c b/src/libserver/symbols_cache.c
index c38496ecc..61060e29c 100644
--- a/src/libserver/symbols_cache.c
+++ b/src/libserver/symbols_cache.c
@@ -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;
diff --git a/src/libserver/symbols_cache.h b/src/libserver/symbols_cache.h
index 290e754d0..28695f446 100644
--- a/src/libserver/symbols_cache.h
+++ b/src/libserver/symbols_cache.h
@@ -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
diff --git a/src/libserver/task.c b/src/libserver/task.c
index 121e1bc64..2e250eaaa 100644
--- a/src/libserver/task.c
+++ b/src/libserver/task.c
@@ -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) &&