1717module  Ouroboros.Consensus.Storage.LedgerDB.V2  (mkInitDb ) where 
1818
1919import  Control.Arrow  ((>>>) )
20- import  qualified  Control.Monad  as  Monad  (void ,  (>=>) )
20+ import  qualified  Control.Monad  as  Monad  (join ,  void )
2121import  Control.Monad.Except 
2222import  Control.RAWLock 
2323import  qualified  Control.RAWLock  as  RAWLock 
2424import  Control.ResourceRegistry 
2525import  Control.Tracer 
26- import  Data.Foldable  (traverse_ )
2726import  qualified  Data.Foldable  as  Foldable 
2827import  Data.Functor.Contravariant  ((>$<) )
2928import  Data.Kind  (Type )
@@ -573,13 +572,14 @@ getEnvSTM (LDBHandle varState) f =
573572getStateRef  :: 
574573  (IOLike  m , Traversable   t ) => 
575574  LedgerDBEnv  m  l  blk  -> 
575+   ResourceRegistry  m  -> 
576576  (LedgerSeq  m  l  ->  t  (StateRef  m  l )) -> 
577577  m  (t  (StateRef  m  l ))
578- getStateRef ldbEnv project = 
578+ getStateRef ldbEnv reg  project = 
579579  RAWLock. withReadAccess (ldbOpenHandlesLock ldbEnv) $  \ ()  ->  do 
580580    tst <-  project <$>  readTVarIO (ldbSeq ldbEnv)
581581    for tst $  \ st ->  do 
582-       tables' <-  duplicate $  tables st
582+       (_,  tables')  <-  allocate reg ( \ _  ->   duplicate $  tables st) close 
583583      pure  st{tables =  tables'}
584584
585585--  |  Like 'StateRef', but takes care of closing the handle when the given action 
@@ -590,8 +590,8 @@ withStateRef ::
590590  (LedgerSeq  m  l  ->  t  (StateRef  m  l )) -> 
591591  (t  (StateRef  m  l ) ->  m  a ) -> 
592592  m  a 
593- withStateRef ldbEnv project = 
594-   bracket ( getStateRef ldbEnv project) (traverse_ (close  .  tables)) 
593+ withStateRef ldbEnv project f  = 
594+   withRegistry  $   \ reg  ->   getStateRef ldbEnv reg  project  >>=  f 
595595
596596acquireAtTarget  :: 
597597  ( HeaderHash  l  ~  HeaderHash  blk 
@@ -602,9 +602,10 @@ acquireAtTarget ::
602602  ) => 
603603  LedgerDBEnv  m  l  blk  -> 
604604  Either   Word64  (Target  (Point  blk )) -> 
605+   ResourceRegistry  m  -> 
605606  m  (Either   GetForkerError  (StateRef  m  l ))
606- acquireAtTarget ldbEnv target = 
607-   getStateRef ldbEnv $  \ l ->  case  target of 
607+ acquireAtTarget ldbEnv target reg  = 
608+   getStateRef ldbEnv reg  $  \ l ->  case  target of 
608609    Right   VolatileTip  ->  pure  $  currentHandle l
609610    Right   ImmutableTip  ->  pure  $  anchorHandle l
610611    Right   (SpecificPoint  pt) ->  do 
@@ -638,7 +639,7 @@ newForkerAtTarget ::
638639  Target  (Point  blk ) -> 
639640  m  (Either   GetForkerError  (Forker  m  l  blk ))
640641newForkerAtTarget h rr pt =  getEnv h $  \ ldbEnv -> 
641-   acquireAtTarget ldbEnv (Right   pt) >>=  traverse  (newForker h ldbEnv rr)
642+   acquireAtTarget ldbEnv (Right   pt) rr  >>=  traverse  (newForker h ldbEnv rr)
642643
643644newForkerByRollback  :: 
644645  ( HeaderHash  l  ~  HeaderHash  blk 
@@ -653,14 +654,14 @@ newForkerByRollback ::
653654  Word64  -> 
654655  m  (Either   GetForkerError  (Forker  m  l  blk ))
655656newForkerByRollback h rr n =  getEnv h $  \ ldbEnv -> 
656-   acquireAtTarget ldbEnv (Left   n) >>=  traverse  (newForker h ldbEnv rr)
657+   acquireAtTarget ldbEnv (Left   n) rr  >>=  traverse  (newForker h ldbEnv rr)
657658
658659closeForkerEnv  :: 
659660  IOLike  m  =>  ForkerEnv  m  l  blk  ->  m  () 
660661closeForkerEnv ForkerEnv {foeResourcesToRelease =  (lock, key, toRelease)} = 
661662  RAWLock. withWriteAccess lock $ 
662663    const  $  do 
663-       id   =<<  atomically (swapTVar toRelease (pure  () ))
664+       Monad. join  $  atomically (swapTVar toRelease (pure  () ))
664665      _ <-  release key
665666      pure  (() , () )
666667
@@ -757,7 +758,7 @@ newForker h ldbEnv rr st = do
757758  let  tr =  LedgerDBForkerEvent  .  TraceForkerEventWithKey  forkerKey >$<  ldbTracer ldbEnv
758759  traceWith tr ForkerOpen 
759760  lseqVar <-  newTVarIO .  LedgerSeq  .  AS. Empty  $  st
760-   (k, toRelease) <-  allocate rr (\ _ ->  newTVarIO (pure   ( ) )) (readTVarIO  Monad. >=>   id )
761+   (k, toRelease) <-  allocate rr (\ _ ->  newTVarIO (close (tables st ))) (Monad. join  .  readTVarIO )
761762  let  forkerEnv = 
762763        ForkerEnv 
763764          { foeLedgerSeq =  lseqVar
0 commit comments