From: Vsevolod Stakhov Date: Tue, 8 Dec 2020 15:09:08 +0000 (+0000) Subject: [Minor] Allow to skip composites second pass X-Git-Tag: 2.7~86 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=cbf7157e47e1e94d0653bc291767c2991e96158f;p=rspamd.git [Minor] Allow to skip composites second pass --- diff --git a/src/libmime/scan_result.c b/src/libmime/scan_result.c index 7b92510ca..1a2d96d83 100644 --- a/src/libmime/scan_result.c +++ b/src/libmime/scan_result.c @@ -158,6 +158,8 @@ rspamd_add_passthrough_result (struct rspamd_task *task, struct rspamd_action *a flags & RSPAMD_PASSTHROUGH_LEAST ? "*least " : "", message, module, priority); } + + scan_result->nresults ++; } static inline gdouble @@ -474,6 +476,7 @@ insert_metric_result (struct rspamd_task *task, symbol, s->score, final_score); + metric_res->nresults ++; return s; } @@ -730,6 +733,8 @@ rspamd_task_add_result_option (struct rspamd_task *task, ret = TRUE; } + task->result->nresults ++; + return ret; } diff --git a/src/libmime/scan_result.h b/src/libmime/scan_result.h index d82699a91..c2b1088da 100644 --- a/src/libmime/scan_result.h +++ b/src/libmime/scan_result.h @@ -89,6 +89,8 @@ struct rspamd_scan_result { guint nactions; guint npositive; guint nnegative; + guint nresults; /**< all results: positive, negative, passthrough etc */ + guint nresults_postfilters; /**< how many results are there before postfilters stage */ struct rspamd_scan_result *prev, *next; /**< double linked list of results */ }; diff --git a/src/libserver/task.c b/src/libserver/task.c index 80216537f..096933803 100644 --- a/src/libserver/task.c +++ b/src/libserver/task.c @@ -756,6 +756,7 @@ rspamd_task_process (struct rspamd_task *task, guint stages) case RSPAMD_TASK_STAGE_COMPOSITES: rspamd_composites_process_task (task); + task->result->nresults_postfilters = task->result->nresults; break; case RSPAMD_TASK_STAGE_POST_FILTERS: @@ -813,8 +814,13 @@ rspamd_task_process (struct rspamd_task *task, guint stages) } break; case RSPAMD_TASK_STAGE_COMPOSITES_POST: - /* Second run of composites processing before idempotent filters */ - rspamd_composites_process_task (task); + /* Second run of composites processing before idempotent filters (if needed) */ + if (task->result->nresults_postfilters != task->result->nresults) { + rspamd_composites_process_task (task); + } + else { + msg_debug_task ("skip second run of composites as the result has not been changed"); + } break; case RSPAMD_TASK_STAGE_IDEMPOTENT: