From 563e2ba69a942e5277a2b1a96407f0a07c5c4c52 Mon Sep 17 00:00:00 2001 From: Leon Mergen Date: Sun, 22 Mar 2020 11:29:03 +0100 Subject: [PATCH] Properly clean up listeners in alt' --- src/manifold/deferred.clj | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/manifold/deferred.clj b/src/manifold/deferred.clj index cf825a02..a69b5810 100644 --- a/src/manifold/deferred.clj +++ b/src/manifold/deferred.clj @@ -1115,10 +1115,16 @@ (success-error-unrealized x val (success! d val) err (error! d err) - (do (on-realized (chain' x) - #(success! d %) - #(error! d %)) - (recur (inc i)))) + (let [l (listener #(success! d %) + #(error! d %))] + (add-listener! x l) + (on-realized d + (fn [&args] + (cancel-listener! x l)) + (fn [&args] + (cancel-listener! x l))) + + (recur (inc i)))) (success! d x))))) d))