Skip to content

Commit 2e6a9d2

Browse files
committed
Tweak
1 parent 2a81fae commit 2e6a9d2

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

src/kcas/kcas.ml

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -396,9 +396,9 @@ let block loc before =
396396
if add_awaiter loc before t then
397397
match Trigger.await t with
398398
| None -> ()
399-
| Some (exn, bt) ->
399+
| Some exn_bt ->
400400
remove_awaiter Backoff.default loc before t;
401-
Printexc.raise_with_backtrace exn bt
401+
Printexc.raise_with_backtrace (fst exn_bt) (snd exn_bt)
402402

403403
let rec update_no_alloc backoff loc state f =
404404
(* Fenceless is safe as we have had a fence before if needed and there is a fence after. *)
@@ -860,19 +860,20 @@ module Xt = struct
860860
Action.run xt_r.post_commit result
861861
else begin
862862
(* We switch to [`Lock_free] as there was interference. *)
863-
commit_once_alloc backoff `Lock_free xt tx
863+
xt_r.mode <- `Lock_free;
864+
commit_once_alloc backoff xt tx
864865
end
865866
end
866867
else if
867868
a_cmp = status
868869
|| finish xt root (if 0 <= status then After else Before)
869870
then Action.run xt_r.post_commit result
870-
else commit_once_alloc backoff xt_r.mode xt tx
871+
else commit_once_alloc backoff xt tx
871872
| exception Exit ->
872873
(* Fenceless is safe as there was a fence before. *)
873874
if fenceless_get (root_as_atomic xt) == R After then
874875
Action.run xt_r.post_commit result
875-
else commit_once_alloc backoff xt_r.mode xt tx
876+
else commit_once_alloc backoff xt tx
876877
end
877878
end
878879
| exception Retry.Invalid -> commit_once_reuse backoff xt tx
@@ -888,37 +889,39 @@ module Xt = struct
888889
| None ->
889890
remove_awaiters t xt (T Leaf) root |> ignore;
890891
commit_reset_reuse backoff xt tx
891-
| Some (exn, bt) ->
892+
| Some exn_bt ->
892893
remove_awaiters t xt (T Leaf) root |> ignore;
893-
Printexc.raise_with_backtrace exn bt
894+
Printexc.raise_with_backtrace (fst exn_bt) (snd exn_bt)
894895
end
895896
| T (Node _) as stop ->
896897
remove_awaiters t xt stop root |> ignore;
897898
commit_once_reuse backoff xt tx
898899
end
899900
end
900901

901-
and commit_once_reuse backoff xt tx =
902-
check xt;
903-
commit_reuse (Backoff.once backoff) xt tx
904-
905-
and commit_reset_reuse backoff xt tx =
902+
and commit_once_reuse backoff (Xt xt_r as xt : _ t) tx =
903+
tree_as_ref xt := T Leaf;
904+
xt_r.validate_counter <- initial_validate_period;
905+
xt_r.post_commit <- Action.noop;
906+
let backoff = Backoff.once backoff in
906907
check xt;
907-
commit_reuse (Backoff.reset backoff) xt tx
908+
commit backoff xt tx
908909

909-
and commit_reuse backoff (Xt xt_r as xt : _ t) tx =
910+
and commit_reset_reuse backoff (Xt xt_r as xt : _ t) tx =
910911
tree_as_ref xt := T Leaf;
911912
xt_r.validate_counter <- initial_validate_period;
912913
xt_r.post_commit <- Action.noop;
914+
let backoff = Backoff.reset backoff in
915+
check xt;
913916
commit backoff xt tx
914917

915-
and commit_once_alloc backoff mode (Xt xt_r as xt : _ t) tx =
916-
check xt;
917-
let backoff = Backoff.once backoff in
918+
and commit_once_alloc backoff (Xt xt_r : _ t) tx =
918919
let rot = U Leaf in
919920
let validate_counter = initial_validate_period in
920921
let post_commit = Action.noop in
921-
let xt = Xt { xt_r with rot; mode; validate_counter; post_commit } in
922+
let xt = Xt { xt_r with rot; validate_counter; post_commit } in
923+
let backoff = Backoff.once backoff in
924+
check xt;
922925
commit backoff xt tx
923926

924927
let[@inline] commit ?(backoff = Backoff.default) ?(mode = `Obstruction_free)

0 commit comments

Comments
 (0)