Skip to content

Commit 26a190b

Browse files
committed
Add internal Q.add helper
1 parent b6df6c3 commit 26a190b

File tree

3 files changed

+5
-10
lines changed

3 files changed

+5
-10
lines changed

lib/picos_sync/condition.ml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,7 @@ let rec cleanup backoff trigger (t : t) =
4040

4141
let rec wait (t : t) mutex trigger fiber backoff =
4242
let before = Atomic.get t in
43-
let after =
44-
match before with
45-
| T Zero -> Q.singleton trigger
46-
| T (One _ as q) -> Q.snoc q trigger
47-
in
43+
let after = Q.add before trigger in
4844
if Atomic.compare_and_set t before after then begin
4945
Mutex.unlock_as (Fiber.Maybe.of_fiber fiber) mutex Backoff.default;
5046
let result = Trigger.await trigger in

lib/picos_sync/mutex.ml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,7 @@ let rec lock_as fiber t entry backoff =
7373
Entry { trigger; fiber }
7474
| Entry _ as entry -> entry
7575
in
76-
let waiters =
77-
match r.waiters with
78-
| T Zero -> Q.singleton entry
79-
| T (One _ as q) -> Q.snoc q entry
80-
in
76+
let waiters = Q.add r.waiters entry in
8177
let after = Locked { fiber = r.fiber; waiters } in
8278
if Atomic.compare_and_set t before after then begin
8379
match Trigger.await entry_r.trigger with

lib/picos_sync/q.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ let[@inline] snoc (One o as t : (_, _) one) value =
3434
let cons = Cons { value; next = S Nil } in
3535
T (One { head = o.head; tail = o.cons; cons })
3636

37+
let[@inline] add t value =
38+
match t with T Zero -> singleton value | T (One _ as o) -> snoc o value
39+
3740
let[@inline] head (One { head = Cons hd; _ } : (_, _) one) = hd.value
3841

3942
let[@inline] tail (One o as t : (_, _) one) =

0 commit comments

Comments
 (0)