From 7bef798edc298767eac617f3413ae7915436b68d Mon Sep 17 00:00:00 2001 From: Christian Spielberger Date: Fri, 13 Oct 2023 09:04:24 +0200 Subject: [PATCH] test: call - reset all cancel rules and cancel only once --- test/call.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/test/call.c b/test/call.c index eaca525f8c..2c3c135526 100644 --- a/test/call.c +++ b/test/call.c @@ -275,6 +275,18 @@ static void cancel_rule_reset(struct cancel_rule *cr) } +static void cancel_rules_reset(struct fixture *f) +{ + struct le *le; + + LIST_FOREACH(&f->rules, le) { + struct cancel_rule *cr = le->data; + + cancel_rule_reset(cr); + } +} + + #define cancel_rule_new(ev, ua, n_incoming, n_progress, n_established) \ cr = fixture_add_cancel_rule(f, ev, ua, n_incoming, n_progress, \ n_established); \ @@ -310,6 +322,8 @@ static bool check_rule(struct cancel_rule *rule, int met_prev, if (rule->cr_and) { met_next = check_rule(rule->cr_and, rule->met && met_prev, ag, ev, prm); + if (rule->met && met_prev && met_next) + return true; } if (rule->met) @@ -398,8 +412,9 @@ static bool check_rule(struct cancel_rule *rule, int met_prev, out: if (met_prev && met_next) { + info("canceled by %H", cancel_rule_debug, rule); re_cancel(); - cancel_rule_reset(rule); + cancel_rules_reset(ag->fix); } return met_next;