summaryrefslogtreecommitdiffstats
path: root/src/evaluate.c
diff options
context:
space:
mode:
authorJeremy Sowden <jeremy@azazel.net>2020-03-03 09:48:29 +0000
committerFlorian Westphal <fw@strlen.de>2020-03-04 23:36:27 +0100
commit4ac2cd199fbae8f52d43db7c817527ba1c5dedaa (patch)
tree801d10a5629204b282d14ee24e1b869efce2fb2a /src/evaluate.c
parent5f38f3f3afe48213e34654b5a5464af67e40a0e5 (diff)
evaluate: don't evaluate payloads twice.
Payload munging means that evaluation of payload expressions may not be idempotent. Add a flag to prevent them from being evaluated more than once. Signed-off-by: Jeremy Sowden <jeremy@azazel.net> Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'src/evaluate.c')
-rw-r--r--src/evaluate.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/evaluate.c b/src/evaluate.c
index e2eff235..a169e41b 100644
--- a/src/evaluate.c
+++ b/src/evaluate.c
@@ -736,6 +736,9 @@ static int expr_evaluate_payload(struct eval_ctx *ctx, struct expr **exprp)
{
struct expr *expr = *exprp;
+ if (expr->payload.evaluated)
+ return 0;
+
if (__expr_evaluate_payload(ctx, expr) < 0)
return -1;
@@ -745,6 +748,8 @@ static int expr_evaluate_payload(struct eval_ctx *ctx, struct expr **exprp)
if (payload_needs_adjustment(expr))
expr_evaluate_bits(ctx, exprp);
+ expr->payload.evaluated = true;
+
return 0;
}