File tree Expand file tree Collapse file tree 1 file changed +16
-7
lines changed
Expand file tree Collapse file tree 1 file changed +16
-7
lines changed Original file line number Diff line number Diff line change @@ -7,24 +7,33 @@ let print pp = Format.printf "%a@." Pp.render_ignore_tags pp
77let print_dyn dyn = print (Dyn. pp dyn)
88
99module Scheduler : sig
10+ type t
11+
1012 exception Never
1113
1214 val yield : unit -> unit Fiber .t
1315
14- val run : 'a Fiber .t -> 'a
16+ val create : unit -> t
17+
18+ val run : t -> 'a Fiber .t -> 'a
1519end = struct
16- let suspended = Queue. create ()
20+ type t = unit Fiber.Ivar .t Queue .t
21+
22+ let t_var = Fiber.Var. create ()
23+
24+ let create () = Queue. create ()
1725
1826 let yield () =
1927 let ivar = Fiber.Ivar. create () in
20- Queue. push suspended ivar;
28+ let t = Fiber.Var. get_exn t_var in
29+ Queue. push t ivar;
2130 Fiber.Ivar. read ivar
2231
2332 exception Never
2433
25- let run t =
26- Fiber. run t ~iter: (fun () ->
27- match Queue. pop suspended with
34+ let run t fiber =
35+ Fiber. run fiber ~iter: (fun () ->
36+ match Queue. pop t with
2837 | None -> raise Never
2938 | Some e -> Fiber. Fill (e, () ))
3039end
@@ -37,7 +46,7 @@ let test ?(expect_never = false) to_dyn f =
3746 in
3847 Fiber. with_error_handler (fun () -> f) ~on_error
3948 in
40- ( try Scheduler. run f |> to_dyn |> print_dyn
49+ ( try Scheduler. run ( Scheduler. create () ) f |> to_dyn |> print_dyn
4150 with Scheduler. Never -> never_raised := true );
4251 match (! never_raised, expect_never) with
4352 | false , false ->
You can’t perform that action at this time.
0 commit comments