@@ -197,20 +197,22 @@ let rec release_after casn = function
197197 | NIL -> true
198198 | CASN { state; lt; gt; awaiters; _ } ->
199199 if lt != NIL then release_after casn lt |> ignore;
200- if not (is_cmp casn state) then (
200+ if not (is_cmp casn state) then begin
201201 state.before < - state.after;
202202 state.casn < - casn_after;
203- resume_awaiters awaiters);
203+ resume_awaiters awaiters
204+ end ;
204205 release_after casn gt
205206
206207let rec release_before casn = function
207208 | NIL -> false
208209 | CASN { state; lt; gt; awaiters; _ } ->
209210 if lt != NIL then release_before casn lt |> ignore;
210- if not (is_cmp casn state) then (
211+ if not (is_cmp casn state) then begin
211212 state.after < - state.before;
212213 state.casn < - casn_before;
213- resume_awaiters awaiters);
214+ resume_awaiters awaiters
215+ end ;
214216 release_before casn gt
215217
216218let release casn cass = function
@@ -219,7 +221,7 @@ let release casn cass = function
219221
220222let rec verify casn = function
221223 | NIL -> `After
222- | CASN { loc; state; lt; gt; _ } -> (
224+ | CASN { loc; state; lt; gt; _ } -> begin
223225 if lt == NIL then
224226 (* Fenceless is safe as [finish] has a fence after. *)
225227 if is_cmp casn state && fenceless_get (as_atomic loc) != state then
@@ -232,7 +234,8 @@ let rec verify casn = function
232234 if is_cmp casn state && fenceless_get (as_atomic loc) != state then
233235 `Before
234236 else verify casn gt
235- | `Before -> `Before )
237+ | `Before -> `Before
238+ end
236239
237240let finish casn (`Undetermined cass as undetermined ) (status : determined ) =
238241 if Atomic. compare_and_set casn (undetermined :> status ) (status :> status )
@@ -282,9 +285,11 @@ let rec determine casn status = function
282285 before the [compare_and_set], because afterwards is too
283286 late as some other domain might finish the operation after
284287 the [compare_and_set] and miss the awaiters. *)
285- (match current.awaiters with
286- | [] -> ()
287- | awaiters -> record.awaiters < - awaiters);
288+ begin
289+ match current.awaiters with
290+ | [] -> ()
291+ | awaiters -> record.awaiters < - awaiters
292+ end ;
288293 if Atomic. compare_and_set (as_atomic loc) current state then
289294 let a_cmp_followed_by_a_cas = a_cas * 2 land (status * 4 ) in
290295 determine casn
@@ -297,7 +302,7 @@ let rec determine casn status = function
297302and is_after casn =
298303 (* Fenceless at most gives old [Undetermined] and causes extra work. *)
299304 match fenceless_get casn with
300- | `Undetermined cass as undetermined -> (
305+ | `Undetermined cass as undetermined -> begin
301306 match determine casn 0 cass with
302307 | status ->
303308 finish casn undetermined
@@ -306,7 +311,8 @@ and is_after casn =
306311 else `Before )
307312 | exception Exit ->
308313 (* Fenceless is safe as there was a fence before. *)
309- fenceless_get casn == `After )
314+ fenceless_get casn == `After
315+ end
310316 | `After -> true
311317 | `Before -> false
312318
@@ -421,13 +427,14 @@ let rec remove_awaiter loc before awaiter =
421427let block timeout loc before =
422428 let t = Domain_local_await. prepare_for_await () in
423429 let alive = Timeout. await timeout t.release in
424- if add_awaiter loc before t.release then (
430+ if add_awaiter loc before t.release then begin
425431 try t.await ()
426432 with cancellation_exn ->
427433 let backtrace = Printexc. get_raw_backtrace () in
428434 remove_awaiter loc before t.release;
429435 Timeout. cancel_alive alive;
430- Printexc. raise_with_backtrace cancellation_exn backtrace);
436+ Printexc. raise_with_backtrace cancellation_exn backtrace
437+ end ;
431438 Timeout. unawait timeout alive
432439
433440let rec update_no_alloc timeout backoff loc state f =
@@ -437,14 +444,16 @@ let rec update_no_alloc timeout backoff loc state f =
437444 match f before with
438445 | after ->
439446 state.after < - after;
440- if before == after then (
447+ if before == after then begin
441448 Timeout. cancel timeout;
442- before)
443- else if Atomic. compare_and_set (as_atomic loc) state_old state then (
449+ before
450+ end
451+ else if Atomic. compare_and_set (as_atomic loc) state_old state then begin
444452 state.before < - after;
445453 resume_awaiters state_old.awaiters;
446454 Timeout. cancel timeout;
447- before)
455+ before
456+ end
448457 else update_no_alloc timeout (Backoff. once backoff) loc state f
449458 | exception Retry. Later ->
450459 block timeout loc before;
@@ -457,15 +466,17 @@ let update_with_state timeout backoff loc f state_old =
457466 let before = eval state_old in
458467 match f before with
459468 | after ->
460- if before == after then (
469+ if before == after then begin
461470 Timeout. cancel timeout;
462- before)
471+ before
472+ end
463473 else
464474 let state = new_state after in
465- if Atomic. compare_and_set (as_atomic loc) state_old state then (
475+ if Atomic. compare_and_set (as_atomic loc) state_old state then begin
466476 resume_awaiters state_old.awaiters;
467477 Timeout. cancel timeout;
468- before)
478+ before
479+ end
469480 else update_no_alloc timeout (Backoff. once backoff) loc state f
470481 | exception Retry. Later ->
471482 let state = new_state before in
@@ -479,9 +490,10 @@ let rec exchange_no_alloc backoff loc state =
479490 let state_old = Atomic. get (as_atomic loc) in
480491 let before = eval state_old in
481492 if before == state.after then before
482- else if Atomic. compare_and_set (as_atomic loc) state_old state then (
493+ else if Atomic. compare_and_set (as_atomic loc) state_old state then begin
483494 resume_awaiters state_old.awaiters;
484- before)
495+ before
496+ end
485497 else exchange_no_alloc (Backoff. once backoff) loc state
486498
487499let is_obstruction_free casn loc =
@@ -495,9 +507,10 @@ let rec cas_with_state loc before state state_old =
495507 || before == if is_after state_old.casn then after' else before')
496508 && (before == state.after
497509 ||
498- if Atomic. compare_and_set (as_atomic loc) state_old state then (
510+ if Atomic. compare_and_set (as_atomic loc) state_old state then begin
499511 resume_awaiters state_old.awaiters;
500- true )
512+ true
513+ end
501514 else
502515 (* We must retry, because compare is by value rather than by state.
503516
@@ -610,10 +623,11 @@ let insert cass loc state =
610623 CASN { loc; state; lt = NIL ; gt = cass; awaiters = [] }
611624 | CASN { loc = a ; gt = NIL ; _ } when a.id < x ->
612625 CASN { loc; state; lt = cass; gt = NIL ; awaiters = [] }
613- | _ -> (
626+ | _ -> begin
614627 match splay ~hit_parent: false x cass with
615628 | _ , Hit _ , _ -> overlap ()
616- | lt , Miss , gt -> CASN { loc; state; lt; gt; awaiters = [] })
629+ | lt , Miss , gt -> CASN { loc; state; lt; gt; awaiters = [] }
630+ end
617631 [@@ inline]
618632
619633module Op = struct
@@ -710,9 +724,10 @@ module Xt = struct
710724 let c1 = c0 + 1 in
711725 xt.validate_counter < - c1;
712726 (* Validate whenever counter reaches next power of 2. *)
713- if c0 land c1 = 0 then (
727+ if c0 land c1 = 0 then begin
714728 Timeout. check (timeout_as_atomic xt);
715- validate_all xt.casn xt.cass)
729+ validate_all xt.casn xt.cass
730+ end
716731 [@@ inline]
717732
718733 let update0 loc f xt lt gt =
@@ -735,15 +750,16 @@ module Xt = struct
735750
736751 let update loc f xt state' lt gt =
737752 let state = Obj. magic state' in
738- if is_cmp xt.casn state then (
753+ if is_cmp xt.casn state then begin
739754 let before = eval state in
740755 let after = f before in
741756 let state =
742757 if before == after then state
743758 else { before; after; casn = xt.casn; awaiters = [] }
744759 in
745760 xt.cass < - CASN { loc; state; lt; gt; awaiters = [] };
746- before)
761+ before
762+ end
747763 else
748764 let current = state.after in
749765 let state = { state with after = f current } in
@@ -762,10 +778,11 @@ module Xt = struct
762778 update0 loc f xt cass NIL
763779 | CASN { loc = a ; state; lt; gt; _ } when Obj. magic a == loc ->
764780 update loc f xt state lt gt
765- | cass -> (
781+ | cass -> begin
766782 match splay ~hit_parent: false x cass with
767783 | l , Miss , r -> update0 loc f xt l r
768- | l , Hit (_loc' , state' ), r -> update loc f xt state' l r)
784+ | l , Hit (_loc' , state' ), r -> update loc f xt state' l r
785+ end
769786 [@@ inline]
770787
771788 let protect xt f x =
@@ -811,12 +828,13 @@ module Xt = struct
811828 | CASN { loc = a ; gt = NIL ; _ } when a.id < x -> ()
812829 | CASN { loc = a ; state; _ } when Obj. magic a == loc ->
813830 validate_one xt.casn a state
814- | cass -> (
831+ | cass -> begin
815832 match splay ~hit_parent: true x cass with
816833 | lt , Hit (a , state ), gt ->
817834 xt.cass < - CASN { loc = a; state; lt; gt; awaiters = [] };
818835 if Obj. magic a == loc then validate_one xt.casn a state
819- | _ , Miss , _ -> impossible () )
836+ | _ , Miss , _ -> impossible ()
837+ end
820838
821839 let is_in_log ~xt loc =
822840 let x = loc.id in
@@ -825,19 +843,20 @@ module Xt = struct
825843 | CASN { loc = a ; lt = NIL ; _ } when x < a.id -> false
826844 | CASN { loc = a ; gt = NIL ; _ } when a.id < x -> false
827845 | CASN { loc = a ; _ } when Obj. magic a == loc -> true
828- | cass -> (
846+ | cass -> begin
829847 match splay ~hit_parent: true x cass with
830848 | lt , Hit (a , state ), gt ->
831849 xt.cass < - CASN { loc = a; state; lt; gt; awaiters = [] };
832850 Obj. magic a == loc
833- | _ , Miss , _ -> impossible () )
851+ | _ , Miss , _ -> impossible ()
852+ end
834853
835854 let rec rollback casn cass_snap cass =
836855 if cass_snap == cass then cass
837856 else
838857 match cass with
839858 | NIL -> NIL
840- | CASN { loc; state; lt; gt; _ } -> (
859+ | CASN { loc; state; lt; gt; _ } -> begin
841860 match splay ~hit_parent: false loc.id cass_snap with
842861 | lt_mark , Miss , gt_mark ->
843862 let lt = rollback casn lt_mark lt
@@ -854,7 +873,8 @@ module Xt = struct
854873 | lt_mark , Hit (loc , state ), gt_mark ->
855874 let lt = rollback casn lt_mark lt
856875 and gt = rollback casn gt_mark gt in
857- CASN { loc; state; lt; gt; awaiters = [] })
876+ CASN { loc; state; lt; gt; awaiters = [] }
877+ end
858878
859879 type 'x snap = cass * Action .t
860880
@@ -866,10 +886,11 @@ module Xt = struct
866886
867887 let rec first ~xt tx = function
868888 | [] -> tx ~xt
869- | tx' :: txs -> (
889+ | tx' :: txs -> begin
870890 match tx ~xt with
871891 | value -> value
872- | exception Retry. Later -> first ~xt tx' txs)
892+ | exception Retry. Later -> first ~xt tx' txs
893+ end
873894
874895 let first ~xt = function
875896 | [] -> Retry. later ()
@@ -881,7 +902,7 @@ module Xt = struct
881902
882903 let rec add_awaiters awaiter casn = function
883904 | NIL as cont -> cont
884- | CASN { loc; state; lt; gt; _ } as stop -> (
905+ | CASN { loc; state; lt; gt; _ } as stop -> begin
885906 match if lt == NIL then lt else add_awaiters awaiter casn lt with
886907 | NIL ->
887908 if
@@ -890,17 +911,19 @@ module Xt = struct
890911 awaiter
891912 then add_awaiters awaiter casn gt
892913 else stop
893- | CASN _ as stop -> stop)
914+ | CASN _ as stop -> stop
915+ end
894916
895917 let rec remove_awaiters awaiter casn stop = function
896918 | NIL -> ()
897919 | CASN { loc; state; lt; gt; _ } as current ->
898920 if lt != NIL then remove_awaiters awaiter casn stop lt;
899- if current != stop then (
921+ if current != stop then begin
900922 remove_awaiter loc
901923 (if is_cmp casn state then eval state else state.before)
902924 awaiter;
903- remove_awaiters awaiter casn stop gt)
925+ remove_awaiters awaiter casn stop gt
926+ end
904927
905928 let initial_validate_period = 16
906929
@@ -917,43 +940,47 @@ module Xt = struct
917940
918941 let rec commit backoff mode xt tx =
919942 match tx ~xt with
920- | result -> (
943+ | result -> begin
921944 match xt.cass with
922945 | NIL ->
923946 Timeout. cancel (timeout_as_atomic xt);
924947 Action. run xt.post_commit result
925948 | CASN { loc; state; lt = NIL ; gt = NIL ; _ } ->
926- if is_cmp xt.casn state then (
949+ if is_cmp xt.casn state then begin
927950 Timeout. cancel (timeout_as_atomic xt);
928- Action. run xt.post_commit result)
951+ Action. run xt.post_commit result
952+ end
929953 else
930954 let before = state.before in
931955 state.before < - state.after;
932956 state.casn < - casn_after;
933957 (* Fenceless is safe inside transactions as each log update has a fence. *)
934958 let state_old = fenceless_get (as_atomic loc) in
935- if cas_with_state loc before state state_old then (
959+ if cas_with_state loc before state state_old then begin
936960 Timeout. cancel (timeout_as_atomic xt);
937- Action. run xt.post_commit result)
961+ Action. run xt.post_commit result
962+ end
938963 else commit (Backoff. once backoff) mode (reset_quick xt) tx
939- | cass -> (
964+ | cass -> begin
940965 match determine_for_owner xt.casn cass with
941966 | true ->
942967 Timeout. cancel (timeout_as_atomic xt);
943968 Action. run xt.post_commit result
944969 | false -> commit (Backoff. once backoff) mode (reset mode xt) tx
945970 | exception Mode. Interference ->
946971 commit (Backoff. once backoff) Mode. lock_free
947- (reset Mode. lock_free xt) tx))
972+ (reset Mode. lock_free xt) tx
973+ end
974+ end
948975 | exception Retry. Invalid ->
949976 Timeout. check (timeout_as_atomic xt);
950977 commit (Backoff. once backoff) mode (reset_quick xt) tx
951- | exception Retry. Later -> (
978+ | exception Retry. Later -> begin
952979 if xt.cass == NIL then invalid_retry () ;
953980 let t = Domain_local_await. prepare_for_await () in
954981 let alive = Timeout. await (timeout_as_atomic xt) t.release in
955982 match add_awaiters t.release xt.casn xt.cass with
956- | NIL -> (
983+ | NIL -> begin
957984 match t.await () with
958985 | () ->
959986 remove_awaiters t.release xt.casn NIL xt.cass;
@@ -963,11 +990,13 @@ module Xt = struct
963990 let backtrace = Printexc. get_raw_backtrace () in
964991 remove_awaiters t.release xt.casn NIL xt.cass;
965992 Timeout. cancel_alive alive;
966- Printexc. raise_with_backtrace cancellation_exn backtrace)
993+ Printexc. raise_with_backtrace cancellation_exn backtrace
994+ end
967995 | CASN _ as stop ->
968996 remove_awaiters t.release xt.casn stop xt.cass;
969997 Timeout. unawait (timeout_as_atomic xt) alive;
970- commit (Backoff. once backoff) mode (reset_quick xt) tx)
998+ commit (Backoff. once backoff) mode (reset_quick xt) tx
999+ end
9711000 | exception exn ->
9721001 Timeout. cancel (timeout_as_atomic xt);
9731002 raise exn
0 commit comments