From 6a44598a318666860dc87a9bfc58b19d538d9f2f Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 3 Oct 2024 12:37:51 -0400 Subject: [PATCH] fix fiber: use a single fut/computation in fibers otherwise we check the wrong computation for cancellation, see https://discuss.ocaml.org/t/confused-about-moonpool-cancellation/15381 --- src/fib/fiber.ml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/fib/fiber.ml b/src/fib/fiber.ml index d9f16b1e..4af7c798 100644 --- a/src/fib/fiber.ml +++ b/src/fib/fiber.ml @@ -57,9 +57,8 @@ end include Private_ -let create_ ~pfiber ~runner () : 'a t = +let create_ ~pfiber ~runner ~res () : 'a t = let id = Handle.generate_fresh () in - let res, _ = Fut.make () in { state = A.make @@ -254,8 +253,8 @@ let add_child_ ~protect (self : _ t) (child : _ t) = done let spawn_ ~parent ~runner (f : unit -> 'a) : 'a t = - let comp = Picos.Computation.create () in - let pfiber = PF.create ~forbid:false comp in + let res, _ = Fut.make () in + let pfiber = PF.create ~forbid:false (Fut.Private_.as_computation res) in (* copy local hmap from parent, if present *) Option.iter @@ -265,7 +264,7 @@ let spawn_ ~parent ~runner (f : unit -> 'a) : 'a t = (match parent with | Some p when is_closed p -> failwith "spawn: nursery is closed" | _ -> ()); - let fib = create_ ~pfiber ~runner () in + let fib = create_ ~pfiber ~runner ~res () in let run () = (* make sure the fiber is accessible from inside itself *)