From: Vsevolod Stakhov Date: Sun, 29 Mar 2015 20:56:05 +0000 (+0100) Subject: Implement resorting. X-Git-Tag: 0.9.0~394 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=5e31d656fef5a30d12aa1fc264cdb1216d9c16b7;p=rspamd.git Implement resorting. --- 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;