1 2 3 4 5 6 7 8 9 10 11 12
(* SPDX-License-Identifier: AGPL-3.0-or-later *)
(* Copyright © 2021-2024 OCamlPro *)
(* Written by the Owi programmers *)
(* TODO: remove once there is an equivalent in stdlib *)
let atomic_modify f atomic =
let rec loop f atomic =
let v_old = Atomic.get atomic in
let v_new = f v_old in
if Atomic.compare_and_set atomic v_old v_new then () else loop f atomic
in
loop f atomic