File tree Expand file tree Collapse file tree 1 file changed +15
-11
lines changed Expand file tree Collapse file tree 1 file changed +15
-11
lines changed Original file line number Diff line number Diff line change 1
1
open Picos
2
2
open Picos_std_awaitable
3
3
4
- type t = unit Awaitable .t
4
+ type t = int Awaitable .t
5
5
6
- let create ?padded () = Awaitable. make ?padded ()
6
+ let create ?padded () = Awaitable. make ?padded 0
7
7
8
8
let [@ inline] wait t lock ~acquire ~release =
9
- let trigger = Trigger. create () in
10
- let awaiter = Awaitable.Awaiter. add t trigger in
9
+ let before = Awaitable. get t in
11
10
release lock;
12
11
let lock_forbidden lock =
13
12
let fiber = Fiber. current () in
@@ -20,12 +19,17 @@ let[@inline] wait t lock ~acquire ~release =
20
19
Fiber. set fiber ~forbid ;
21
20
Printexc. raise_with_backtrace exn bt
22
21
in
23
- match Trigger. await trigger with
24
- | None -> lock_forbidden lock
25
- | Some exn_bt ->
26
- Awaitable.Awaiter. remove awaiter;
22
+ match if Awaitable. get t == before then Awaitable. await t before with
23
+ | () -> lock_forbidden lock
24
+ | exception exn ->
25
+ let bt = Printexc. get_raw_backtrace () in
27
26
lock_forbidden lock;
28
- Printexc. raise_with_backtrace (fst exn_bt) (snd exn_bt)
27
+ Printexc. raise_with_backtrace exn bt
29
28
30
- let signal = Awaitable. signal
31
- let broadcast = Awaitable. broadcast
29
+ let signal t =
30
+ Awaitable. incr t;
31
+ Awaitable. signal t
32
+
33
+ let broadcast t =
34
+ Awaitable. incr t;
35
+ Awaitable. broadcast t
You can’t perform that action at this time.
0 commit comments