From 92300ad698e00b2ea663433bec09c74a6ebcc1a7 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Tue, 7 Oct 2025 13:53:04 -0400 Subject: [PATCH] fix: make `Moonpool_lwt.fut_of_lwt` idempotent this way the resulting future can be cancelled/fulfilled from the outside without crashing Lwt --- src/lwt/moonpool_lwt.ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lwt/moonpool_lwt.ml b/src/lwt/moonpool_lwt.ml index 89040d2e..71b1f941 100644 --- a/src/lwt/moonpool_lwt.ml +++ b/src/lwt/moonpool_lwt.ml @@ -142,10 +142,10 @@ end (** Resolve [prom] with the result of [lwt_fut] *) let transfer_lwt_to_fut (lwt_fut : 'a Lwt.t) (prom : 'a Fut.promise) : unit = Lwt.on_any lwt_fut - (fun x -> M.Fut.fulfill prom (Ok x)) + (fun x -> M.Fut.fulfill_idempotent prom (Ok x)) (fun exn -> let bt = Printexc.get_callstack 10 in - M.Fut.fulfill prom (Error (Exn_bt.make exn bt))) + M.Fut.fulfill_idempotent prom (Error (Exn_bt.make exn bt))) let[@inline] register_trigger_on_lwt_termination (lwt_fut : _ Lwt.t) (tr : M.Trigger.t) : unit =