Skip to content

Commit b49c217

Browse files
committed
Use backoff when removing awaiters
1 parent 897da96 commit b49c217

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

src/kcas/kcas.ml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ let[@tail_mod_cons] rec remove_first x' removed = function
419419
[]
420420
| x :: xs -> if x == x' then xs else x :: remove_first x' removed xs
421421

422-
let rec remove_awaiter loc before awaiter =
422+
let rec remove_awaiter backoff loc before awaiter =
423423
(* Fenceless is safe as we have fence after. *)
424424
let state_old = fenceless_get (as_atomic loc) in
425425
if before == eval state_old then
@@ -430,15 +430,15 @@ let rec remove_awaiter loc before awaiter =
430430
{ before = Obj.magic (); after = before; which = W After; awaiters }
431431
in
432432
if not (Atomic.compare_and_set (as_atomic loc) state_old state_new) then
433-
remove_awaiter loc before awaiter
433+
remove_awaiter (Backoff.once backoff) loc before awaiter
434434

435435
let block timeout loc before =
436436
let t = Domain_local_await.prepare_for_await () in
437437
let alive = Timeout.await timeout t.release in
438438
if add_awaiter loc before t.release then begin
439439
try t.await ()
440440
with cancellation_exn ->
441-
remove_awaiter loc before t.release;
441+
remove_awaiter Backoff.default loc before t.release;
442442
Timeout.cancel_alive alive;
443443
raise cancellation_exn
444444
end;
@@ -862,7 +862,7 @@ module Xt = struct
862862
| T (Node node_r) as current ->
863863
if is_node node_r.lt then remove_awaiters awaiter which stop node_r.lt;
864864
if current != stop then begin
865-
remove_awaiter node_r.loc
865+
remove_awaiter Backoff.default node_r.loc
866866
(let state = node_r.state in
867867
if is_cmp which state then eval state else state.before)
868868
awaiter;

0 commit comments

Comments
 (0)