diff options
Diffstat (limited to 'lib/kernel/Lifecycle.ml')
| -rw-r--r-- | lib/kernel/Lifecycle.ml | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/kernel/Lifecycle.ml b/lib/kernel/Lifecycle.ml index ff67ecf..772cb6e 100644 --- a/lib/kernel/Lifecycle.ml +++ b/lib/kernel/Lifecycle.ml @@ -23,7 +23,18 @@ class virtual counted = object (self) true method release = - Atomic.decr references; - if Atomic.get references <= 0 then + if Atomic.fetch_and_add references (-1) = 1 then self#destroy end + +class retaining inner (owner : lifecycle) = object + inherit counted + initializer ignore owner#reference + + method destroy = + Protocols.Handle.release inner; + owner#release + + method hash = Protocols.Handle.hash inner + method protocols = Protocols.Handle.protocols inner +end |
