@@ -53,30 +53,28 @@ type t = {
5353 mutable run : bool ;
5454}
5555
56- let fiber_key = Picos_thread.TLS. new_key @@ fun () -> ref Fiber.Maybe. nothing
57-
58- let rec next p t =
56+ let rec next (p : Per_thread.t ) t =
5957 match Collection. pop_exn t.ready with
6058 | Spawn (fiber , main ) ->
61- p := Fiber.Maybe. of_fiber fiber;
59+ p.current < - Fiber.Maybe. of_fiber fiber;
6260 Effect.Deep. match_with main fiber t.handler
6361 | Raise (fiber , k , exn_bt ) ->
64- p := Fiber.Maybe. of_fiber fiber;
62+ p.current < - Fiber.Maybe. of_fiber fiber;
6563 Exn_bt. discontinue k exn_bt
6664 | Return (fiber , k ) ->
67- p := Fiber.Maybe. of_fiber fiber;
65+ p.current < - Fiber.Maybe. of_fiber fiber;
6866 Effect.Deep. continue k ()
6967 | Current (fiber , k ) ->
70- p := Fiber.Maybe. of_fiber fiber;
68+ p.current < - Fiber.Maybe. of_fiber fiber;
7169 Effect.Deep. continue k fiber
7270 | Continue (fiber , k ) ->
73- p := Fiber.Maybe. of_fiber fiber;
71+ p.current < - Fiber.Maybe. of_fiber fiber;
7472 Fiber. continue fiber k ()
7573 | Resume (fiber , k ) ->
76- p := Fiber.Maybe. of_fiber fiber;
74+ p.current < - Fiber.Maybe. of_fiber fiber;
7775 Fiber. resume fiber k
7876 | exception Not_found ->
79- p := Fiber.Maybe. nothing;
77+ p.current < - Fiber.Maybe. nothing;
8078 if Atomic. get t.num_alive_fibers <> 0 then begin
8179 Mutex. lock t.mutex;
8280 if Collection. is_empty t.ready && Atomic. get t.num_alive_fibers <> 0
@@ -158,22 +156,22 @@ let context ?fatal_exn_handler () =
158156 and current =
159157 Some
160158 (fun k ->
161- let p = Picos_thread.TLS. get fiber_key in
162- let fiber = Fiber.Maybe. to_fiber ! p in
159+ let p = Per_thread. get () in
160+ let fiber = Fiber.Maybe. to_fiber p.current in
163161 Collection. push t.ready (Current (fiber, k));
164162 next p t)
165163 and yield =
166164 Some
167165 (fun k ->
168- let p = Picos_thread.TLS. get fiber_key in
169- let fiber = Fiber.Maybe. to_fiber ! p in
166+ let p = Per_thread. get () in
167+ let fiber = Fiber.Maybe. to_fiber p.current in
170168 Collection. push t.ready (Continue (fiber, k));
171169 next p t)
172170 and return =
173171 Some
174172 (fun k ->
175- let p = Picos_thread.TLS. get fiber_key in
176- let fiber = Fiber.Maybe. to_fiber ! p in
173+ let p = Per_thread. get () in
174+ let fiber = Fiber.Maybe. to_fiber p.current in
177175 Collection. push t.ready (Return (fiber, k));
178176 next p t)
179177 and handler = { retc; exnc; effc }
@@ -182,8 +180,8 @@ let context ?fatal_exn_handler () =
182180 function
183181 | Fiber .Current -> t .current
184182 | Fiber .Spawn r ->
185- let p = Picos_thread.TLS. get fiber_key in
186- let fiber = Fiber.Maybe. to_fiber ! p in
183+ let p = Per_thread. get () in
184+ let fiber = Fiber.Maybe. to_fiber p.current in
187185 if Fiber. is_canceled fiber then t.yield
188186 else begin
189187 Atomic. incr t.num_alive_fibers;
@@ -193,8 +191,8 @@ let context ?fatal_exn_handler () =
193191 end
194192 | Fiber. Yield -> t.yield
195193 | Computation. Cancel_after r -> begin
196- let p = Picos_thread.TLS. get fiber_key in
197- let fiber = Fiber.Maybe. to_fiber ! p in
194+ let p = Per_thread. get () in
195+ let fiber = Fiber.Maybe. to_fiber p.current in
198196 if Fiber. is_canceled fiber then t.yield
199197 else
200198 match
@@ -211,8 +209,8 @@ let context ?fatal_exn_handler () =
211209 | Trigger. Await trigger ->
212210 Some
213211 (fun k ->
214- let p = Picos_thread.TLS. get fiber_key in
215- let fiber = Fiber.Maybe. to_fiber ! p in
212+ let p = Per_thread. get () in
213+ let fiber = Fiber.Maybe. to_fiber p.current in
216214 if Fiber. try_suspend fiber trigger fiber k t.resume then next p t
217215 else begin
218216 Collection. push t.ready (Resume (fiber, k));
@@ -221,14 +219,14 @@ let context ?fatal_exn_handler () =
221219 | _ -> None
222220 and retc () =
223221 Atomic. decr t.num_alive_fibers;
224- let p = Picos_thread.TLS. get fiber_key in
222+ let p = Per_thread. get () in
225223 next p t
226224 in
227225 t
228226
229227let runner_on_this_thread t =
230228 Select. check_configured () ;
231- next (Picos_thread.TLS. get fiber_key ) t
229+ next (Per_thread. get () ) t
232230
233231let rec await t =
234232 if ! (t.num_waiters_non_zero) then begin
@@ -257,7 +255,7 @@ let run_fiber ?context:t_opt fiber main =
257255 t.run < - true ;
258256 Mutex. unlock t.mutex;
259257 Collection. push t.ready (Spawn (fiber, main));
260- next (Picos_thread.TLS. get fiber_key ) t;
258+ next (Per_thread. get () ) t;
261259 Mutex. lock t.mutex;
262260 await t
263261 end
0 commit comments