aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rspamd.com>2024-08-16 12:56:42 +0100
committerVsevolod Stakhov <vsevolod@rspamd.com>2024-08-16 12:56:42 +0100
commit615e833c99abc42226838c23c6364e90a22469c1 (patch)
tree5de581ddf99f145b81d9c79c276b0ce2ac5ad677
parent973beec4a62b941aa9d225eb48e095c41e484de3 (diff)
downloadrspamd-vstakhov-another-grow-factor-fix.tar.gz
rspamd-vstakhov-another-grow-factor-fix.zip
[Rework] Another reiteration on the grow factorvstakhov-another-grow-factor-fix
-rw-r--r--src/libmime/scan_result.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/libmime/scan_result.c b/src/libmime/scan_result.c
index 894ae4f9e..1fe78d9c4 100644
--- a/src/libmime/scan_result.c
+++ b/src/libmime/scan_result.c
@@ -1101,21 +1101,23 @@ void rspamd_task_result_adjust_grow_factor(struct rspamd_task *task,
}
/* Adjust factor by selecting all symbols and checking those with positive scores */
+ float *scores = rspamd_mempool_alloc(task->task_pool, sizeof(float) * kh_size(result->symbols));
+ gsize i = 0;
+
kh_foreach(result->symbols, kk, res, {
- if (res->score > 0) {
- double mult = grow_factor - 1.0;
- /* We adjust the factor by the ratio of the score to the max limit */
- if (max_limit > 0 && !isnan(res->score)) {
- mult *= res->score / max_limit;
- final_grow_factor *= 1.0 + mult;
- }
+ if (res->score > 0 && !isnan(res->score)) {
+ scores[i++] = res->score / max_limit;
}
});
+ float sc_adjustment = rspamd_sum_floats(scores, &i);
+ final_grow_factor = grow_factor * sc_adjustment;
+
+
/* At this stage we know that we have some grow factor to apply */
if (final_grow_factor > 1.0) {
- msg_info_task("calculated final grow factor for task: %.3f (%.2f the original one)",
- final_grow_factor, grow_factor);
+ msg_info_task("calculated final grow factor for task: %.3f (%.2f the original one; %.2f max limit)",
+ final_grow_factor, grow_factor, max_limit);
kh_foreach(result->symbols, kk, res, {
if (res->score > 0) {
result->score -= res->score;