@@ -58,17 +58,6 @@ type t = {
5858 mutable run : bool ;
5959}
6060
61- let fiber_key : Fiber.Maybe.t ref Picos_thread.TLS.t =
62- Picos_thread.TLS. create ()
63-
64- let get () =
65- match Picos_thread.TLS. get_exn fiber_key with
66- | p -> p
67- | exception Picos_thread.TLS. Not_set ->
68- let p = ref Fiber.Maybe. nothing in
69- Picos_thread.TLS. set fiber_key p;
70- p
71-
7261let [@ inline] relaxed_wakeup t ~known_not_empty =
7362 if
7463 t.num_waiters_non_zero
@@ -79,18 +68,16 @@ let[@inline] relaxed_wakeup t ~known_not_empty =
7968 Condition. signal t.condition
8069 end
8170
82- let exec p t ready =
83- begin
84- p :=
85- match ready with
86- | Spawn (fiber, _)
87- | Raise (fiber, _, _, _)
88- | Return (fiber, _)
89- | Current (fiber, _)
90- | Continue (fiber, _)
91- | Resume (fiber , _ ) ->
92- Fiber.Maybe. of_fiber fiber
93- end ;
71+ let exec (p : Fiber.Per_thread.t ) t ready =
72+ p.current < -
73+ (match ready with
74+ | Spawn (fiber, _)
75+ | Raise (fiber, _, _, _)
76+ | Return (fiber, _)
77+ | Current (fiber, _)
78+ | Continue (fiber, _)
79+ | Resume (fiber , _ ) ->
80+ Fiber.Maybe. of_fiber fiber);
9481 match ready with
9582 | Spawn (fiber , main ) -> Effect.Deep. match_with main fiber t.handler
9683 | Raise (_ , k , exn , bt ) -> Effect.Deep. discontinue_with_backtrace k exn bt
@@ -105,7 +92,7 @@ let rec next p t =
10592 relaxed_wakeup t ~known_not_empty: false ;
10693 exec p t ready
10794 | exception Not_found ->
108- p := Fiber.Maybe. nothing;
95+ p.current < - Fiber.Maybe. nothing;
10996 if Atomic. get t.num_alive_fibers <> 0 then begin
11097 Mutex. lock t.mutex;
11198 let n = ! (t.num_waiters) + 1 in
@@ -192,30 +179,30 @@ let context ?fatal_exn_handler () =
192179 t.current < -
193180 Some
194181 (fun k ->
195- let p = Picos_thread.TLS. get_exn fiber_key in
196- let fiber = Fiber.Maybe. to_fiber ! p in
182+ let p = Fiber.Per_thread. get () in
183+ let fiber = Fiber.Maybe. to_fiber p.current in
197184 Collection. push t.ready (Current (fiber, k));
198185 next p t);
199186 t.yield < -
200187 Some
201188 (fun k ->
202- let p = Picos_thread.TLS. get_exn fiber_key in
203- let fiber = Fiber.Maybe. to_fiber ! p in
189+ let p = Fiber.Per_thread. get () in
190+ let fiber = Fiber.Maybe. to_fiber p.current in
204191 Collection. push t.ready (Continue (fiber, k));
205192 next p t);
206193 t.return < -
207194 Some
208195 (fun k ->
209- let p = Picos_thread.TLS. get_exn fiber_key in
210- let fiber = Fiber.Maybe. to_fiber ! p in
196+ let p = Fiber.Per_thread. get () in
197+ let fiber = Fiber.Maybe. to_fiber p.current in
211198 Collection. push t.ready (Return (fiber, k));
212199 next p t);
213200 t.handler < -
214201 {
215202 retc =
216203 (fun () ->
217204 Atomic. decr t.num_alive_fibers;
218- let p = Picos_thread.TLS. get_exn fiber_key in
205+ let p = Fiber.Per_thread. get () in
219206 next p t);
220207 exnc;
221208 effc =
@@ -224,8 +211,8 @@ let context ?fatal_exn_handler () =
224211 match e with
225212 | Fiber. Current -> t.current
226213 | Fiber. Spawn r ->
227- let p = Picos_thread.TLS. get_exn fiber_key in
228- let fiber = Fiber.Maybe. to_fiber ! p in
214+ let p = Fiber.Per_thread. get () in
215+ let fiber = Fiber.Maybe. to_fiber p.current in
229216 if Fiber. is_canceled fiber then t.yield
230217 else begin
231218 Atomic. incr t.num_alive_fibers;
@@ -235,8 +222,8 @@ let context ?fatal_exn_handler () =
235222 end
236223 | Fiber. Yield -> t.yield
237224 | Computation. Cancel_after r -> begin
238- let p = Picos_thread.TLS. get_exn fiber_key in
239- let fiber = Fiber.Maybe. to_fiber ! p in
225+ let p = Fiber.Per_thread. get () in
226+ let fiber = Fiber.Maybe. to_fiber p.current in
240227 if Fiber. is_canceled fiber then t.yield
241228 else
242229 match
@@ -254,8 +241,8 @@ let context ?fatal_exn_handler () =
254241 | Trigger. Await trigger ->
255242 Some
256243 (fun k ->
257- let p = Picos_thread.TLS. get_exn fiber_key in
258- let fiber = Fiber.Maybe. to_fiber ! p in
244+ let p = Fiber.Per_thread. get () in
245+ let fiber = Fiber.Maybe. to_fiber p.current in
259246 if Fiber. try_suspend fiber trigger fiber k t.resume then
260247 next p t
261248 else begin
@@ -268,7 +255,7 @@ let context ?fatal_exn_handler () =
268255
269256let runner_on_this_thread t =
270257 Select. check_configured () ;
271- next (get () ) t
258+ next (Fiber.Per_thread. get () ) t
272259
273260let rec await t =
274261 if t.num_waiters_non_zero then begin
@@ -296,7 +283,8 @@ let run_fiber ?context:t_opt fiber main =
296283 else begin
297284 t.run < - true ;
298285 Mutex. unlock t.mutex;
299- get () := Fiber.Maybe. of_fiber fiber;
286+ let p = Fiber.Per_thread. get () in
287+ p.current < - Fiber.Maybe. of_fiber fiber;
300288 Effect.Deep. match_with main fiber t.handler;
301289 Mutex. lock t.mutex;
302290 await t
0 commit comments