MINOR: pattern: during reload, delete elements frem the ref, not the expression
authorWilly Tarreau <w@1wt.eu>
Tue, 3 Nov 2020 12:36:58 +0000 (13:36 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 5 Nov 2020 18:27:09 +0000 (19:27 +0100)
Instead of scanning all elements from the expression and using the
slow delete path there, let's use the faster way which involves
pat_delete_gen() while the elements are detached from ther reference.

src/pattern.c

index 9b58d35..b2f06fe 100644 (file)
@@ -2074,9 +2074,8 @@ void pat_ref_reload(struct pat_ref *ref, struct pat_ref *replace)
                        LIST_DEL_INIT(&bref->users);
                        bref->ref = NULL;
                }
+               pat_delete_gen(ref, elt);
                LIST_DEL(&elt->list);
-               LIST_DEL(&elt->list_head);
-               LIST_DEL(&elt->tree_head);
                free(elt->pattern);
                free(elt->sample);
                free(elt);
@@ -2087,7 +2086,6 @@ void pat_ref_reload(struct pat_ref *ref, struct pat_ref *replace)
        LIST_DEL(&replace->head);
 
        list_for_each_entry(expr, &ref->pat, list) {
-               expr->pat_head->prune(expr);
                list_for_each_entry(elt, &ref->head, list) {
                        char *err = NULL;
                        struct sample_data *data = NULL;