From 5e31d656fef5a30d12aa1fc264cdb1216d9c16b7 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Sun, 29 Mar 2015 21:56:05 +0100 Subject: [PATCH] Implement resorting. --- src/libutil/expression.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/libutil/expression.c b/src/libutil/expression.c index 83ee76a07..d656db37b 100644 --- a/src/libutil/expression.c +++ b/src/libutil/expression.c @@ -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; -- 2.39.5