From f785274e357350e6e2a9cd0ee50ea248777decd8 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 19 Dec 2023 23:18:22 +1300 Subject: [PATCH] Avoid double-execution within a round; see https://git.syndicate-lang.org/syndicate-lang/syndicate-js/issues/3 --- syndicate/dataflow.rkt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/syndicate/dataflow.rkt b/syndicate/dataflow.rkt index 67bc9e0..ac94b68 100644 --- a/syndicate/dataflow.rkt +++ b/syndicate/dataflow.rkt @@ -54,11 +54,14 @@ (define workset (dataflow-graph-damaged-nodes g)) (when (not (hash-empty? workset)) (set-dataflow-graph-damaged-nodes! g (hash)) + (define updated (make-hash)) (hash-for-each workset (lambda (object-id _) (for [(subject-id (in-hashset-values (dataflow-graph-edges-forward g) object-id))] - (dataflow-forget-subject! g subject-id) - (parameterize ((current-dataflow-subject-id subject-id)) - (repair-node! subject-id))))) + (when (not (hash-has-key? updated subject-id)) + (hash-set! updated subject-id #t) + (dataflow-forget-subject! g subject-id) + (parameterize ((current-dataflow-subject-id subject-id)) + (repair-node! subject-id)))))) (loop))))