]> source.dussan.org Git - rspamd.git/commitdiff
Implement resorting.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 29 Mar 2015 20:56:05 +0000 (21:56 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sun, 29 Mar 2015 20:56:05 +0000 (21:56 +0100)
src/libutil/expression.c

index 83ee76a07b903882ab09b4890ba2afbbf6809baf..d656db37b4e291a96c565a92ddcb333e68192de1 100644 (file)
@@ -929,6 +929,13 @@ rspamd_process_expression (struct rspamd_expression *expr, gint flags,
        if (expr->evals == expr->next_resort) {
                expr->next_resort = ottery_rand_range (MAX_RESORT_EVALS) +
                                MIN_RESORT_EVALS;
+               /* Set priorities for branches */
+               g_node_traverse (expr->ast, G_POST_ORDER, G_TRAVERSE_ALL, -1,
+                               rspamd_ast_priority_traverse, expr);
+
+               /* Now set less expensive branches to be evaluated first */
+               g_node_traverse (expr->ast, G_POST_ORDER, G_TRAVERSE_NON_LEAVES, -1,
+                               rspamd_ast_resort_traverse, NULL);
        }
 
        return ret;