if (stage != RSPAMD_TASK_STAGE_IDEMPOTENT &&
!(item->flags & SYMBOL_TYPE_IGNORE_PASSTHROUGH)) {
if (check_metric_limit(task)) {
- msg_info_task_lambda("task has already the result being set, ignore further checks");
+ msg_debug_cache_task_lambda("task has already the result being set, ignore further checks");
return true;
}
}
}
- process_symbol(task, cache, item, dyn_item);
- all_done = false;
+ return process_symbol(task, cache, item, dyn_item);
}
/* Continue processing */
symcache_runtime::process_filters(struct rspamd_task *task, symcache &cache, int start_events) -> bool
{
auto all_done = true;
+ auto log_func = RSPAMD_LOG_FUNC;
+ auto has_passtrough = false;
for (const auto[idx, item]: rspamd::enumerate(order->d)) {
/* Exclude all non filters */
break;
}
+ if (!(item->flags & (SYMBOL_TYPE_FINE|SYMBOL_TYPE_IGNORE_PASSTHROUGH))) {
+ if (has_passtrough || check_metric_limit(task)) {
+ msg_debug_cache_task_lambda("task has already the result being set, ignore further checks");
+ has_passtrough = true;
+ /* Skip this item */
+ continue;
+ }
+ }
+
auto dyn_item = &dynamic_items[idx];
if (!dyn_item->started) {
return false;
}
}
-
- if (!(item->flags & SYMBOL_TYPE_FINE)) {
- if (check_metric_limit(task)) {
- msg_info_task("task has already the result being set, ignore further checks");
- all_done = true;
- break;
- }
- }
}
return all_done;