aboutsummaryrefslogtreecommitdiffstats
path: root/src/libutil/expression.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil/expression.c')
-rw-r--r--src/libutil/expression.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/libutil/expression.c b/src/libutil/expression.c
index 12186b796..2bbc5fa3b 100644
--- a/src/libutil/expression.c
+++ b/src/libutil/expression.c
@@ -476,6 +476,7 @@ rspamd_ast_priority_cmp (GNode *a, GNode *b)
struct rspamd_expression_elt *ea = a->data, *eb = b->data;
gdouble w1, w2;
+
/* Special logic for atoms */
if (ea->type == ELT_ATOM && eb->type == ELT_ATOM &&
ea->priority == eb->priority) {
@@ -495,8 +496,18 @@ rspamd_ast_priority_cmp (GNode *a, GNode *b)
static gboolean
rspamd_ast_resort_traverse (GNode *node, gpointer unused)
{
+ GNode *children, *last;
+
if (node->children) {
+
+ children = node->children;
+ last = g_node_last_sibling (children);
+ /* Needed for utlist compatibility */
+ children->prev = last;
DL_SORT (node->children, rspamd_ast_priority_cmp);
+ /* Restore GLIB compatibility */
+ children = node->children;
+ children->prev = NULL;
}
return FALSE;