From f94fe88f4db32796b919fb5e7d133c2a3d9836b9 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Thu, 28 Mar 2024 16:25:34 +0100 Subject: [PATCH] set entropy sources via compare_and_set --- rng/entropy.ml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/rng/entropy.ml b/rng/entropy.ml index 008bdb80..0404acb8 100644 --- a/rng/entropy.ml +++ b/rng/entropy.ml @@ -55,10 +55,16 @@ let _sources = Atomic.make S.empty type source = Rng.source let register_source name = - let n = S.cardinal (Atomic.get _sources) in - let source = (n, name) in - Atomic.set _sources (S.add source (Atomic.get _sources)); - source + let rec set () = + let sources = Atomic.get _sources in + let n = S.cardinal sources in + let source = (n, name) in + if Atomic.compare_and_set _sources sources (S.add source sources) then + source + else + set () + in + set () let id (idx, _) = idx