diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-03-29 21:56:05 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-03-29 21:56:05 +0100 |
commit | 5e31d656fef5a30d12aa1fc264cdb1216d9c16b7 (patch) | |
tree | 51838ce321f56e9b3eddc6512fcb033c9066b0ca /src/libutil/expression.c | |
parent | dca87323aacee1e8f5ac38cc0b251d40a32adaa2 (diff) | |
download | rspamd-5e31d656fef5a30d12aa1fc264cdb1216d9c16b7.tar.gz rspamd-5e31d656fef5a30d12aa1fc264cdb1216d9c16b7.zip |
Implement resorting.
Diffstat (limited to 'src/libutil/expression.c')
-rw-r--r-- | src/libutil/expression.c | 7 |
1 files changed, 7 insertions, 0 deletions
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; |