diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-06-02 16:28:48 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-06-02 16:28:48 +0100 |
commit | c79ae2cf0d4fbf32e79b715ffb577ec9b8555fa7 (patch) | |
tree | e13e2563766f4df657a5b5135a7508e0c55cd225 /src/libserver/task.c | |
parent | 6d7f11963edfd5113f32060267695c513613ec1f (diff) | |
download | rspamd-c79ae2cf0d4fbf32e79b715ffb577ec9b8555fa7.tar.gz rspamd-c79ae2cf0d4fbf32e79b715ffb577ec9b8555fa7.zip |
Add checkpoint to avoid endless iteration.
Diffstat (limited to 'src/libserver/task.c')
-rw-r--r-- | src/libserver/task.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/libserver/task.c b/src/libserver/task.c index 0f73c15f1..315732f97 100644 --- a/src/libserver/task.c +++ b/src/libserver/task.c @@ -364,17 +364,25 @@ rspamd_process_filters (struct rspamd_task *task) gpointer item = NULL; /* Insert default metric to be sure that it exists all the time */ - /* TODO: make preprocessing only once */ - rspamd_create_metric_result (task, DEFAULT_METRIC); - if (task->settings) { - const ucl_object_t *wl; - - wl = ucl_object_find_key (task->settings, "whitelist"); - if (wl != NULL) { - msg_info ("<%s> is whitelisted", task->message_id); - task->flags |= RSPAMD_TASK_FLAG_SKIP; - return TRUE; + + if (task->checkpoint == NULL) { + rspamd_create_metric_result (task, DEFAULT_METRIC); + if (task->settings) { + const ucl_object_t *wl; + + wl = ucl_object_find_key (task->settings, "whitelist"); + if (wl != NULL) { + msg_info ("<%s> is whitelisted", task->message_id); + task->flags |= RSPAMD_TASK_FLAG_SKIP; + return TRUE; + } } + + task->checkpoint = GUINT_TO_POINTER (0x1); + } + else { + /* TODO: in future, we need to add dependencies here */ + return TRUE; } /* Process metrics symbols */ @@ -462,6 +470,9 @@ rspamd_task_process (struct rspamd_task *task, guint stages) msg_debug ("completed stage %d", st); task->processed_stages |= st; + /* Reset checkpoint */ + task->checkpoint = NULL; + /* Tail recursion */ return rspamd_task_process (task, stages); } |