aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel/Lifecycle.ml
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2026-09-27 15:00:27 -0300
committerMarcos Magueta <maguetamarcos@gmail.com>2026-09-27 15:00:27 -0300
commit5370c5f1ce62cc9add4f3f6523bdd1f2b897cfa0 (patch)
tree9a5aeda3c53c3256a60c1b91320af0d8450d1bdc /lib/kernel/Lifecycle.ml
parentf91e63c3bbe9f23ec11ab9c21e58edb6e61c94f9 (diff)
downloadRNT-5370c5f1ce62cc9add4f3f6523bdd1f2b897cfa0.tar.gz
RNT-5370c5f1ce62cc9add4f3f6523bdd1f2b897cfa0.zip
session exclusive lifetime
Diffstat (limited to '')
-rw-r--r--lib/kernel/Lifecycle.ml7
-rw-r--r--lib/kernel/Lifecycle.mli1
2 files changed, 8 insertions, 0 deletions
diff --git a/lib/kernel/Lifecycle.ml b/lib/kernel/Lifecycle.ml
index bf0b544..ac6bb20 100644
--- a/lib/kernel/Lifecycle.ml
+++ b/lib/kernel/Lifecycle.ml
@@ -14,6 +14,13 @@ class null =
method release = ()
end
+class exclusive =
+ object
+ val taken = Atomic.make false
+ method reference = Atomic.compare_and_set taken false true
+ method release = Atomic.set taken false
+ end
+
class virtual counted =
object (self)
val references = Atomic.make 1
diff --git a/lib/kernel/Lifecycle.mli b/lib/kernel/Lifecycle.mli
index fa3abee..d4ef178 100644
--- a/lib/kernel/Lifecycle.mli
+++ b/lib/kernel/Lifecycle.mli
@@ -9,6 +9,7 @@ class type virtual controlled_lifecycle = object
end
class null : lifecycle
+class exclusive : lifecycle
class virtual counted : controlled_lifecycle
(** stands for [inner], carrying what it carries, while holding a