@@ -98,9 +98,11 @@ mkInitDb args flavArgs getBlock =
9898    , mkLedgerDb =  \ lseq ->  do 
9999        varDB <-  newTVarIO lseq
100100        prevApplied <-  newTVarIO Set. empty
101-         forkers <-  newTVarIO Map. empty
102-         nextForkerKey <-  newTVarIO (ForkerKey  0 )
103101        lock <-  RAWLock. new LDBLock 
102+         --  We ignore the ResourceKey here because we only want this to close
103+         --  once the node is shutting down.
104+         (_, forkers) <-  allocate lgrRegistry (\ _ ->  newTVarIO Map. empty) (closeAllForkers lock)
105+         nextForkerKey <-  newTVarIO (ForkerKey  0 )
104106        let  env = 
105107              LedgerDBEnv 
106108                { ldbSeq =  varDB
@@ -421,7 +423,7 @@ implCloseDB (LDBHandle varState) = do
421423
422424  --  Only when the LedgerDB was open
423425  whenJust mbOpenEnv $  \ env ->  do 
424-     closeAllForkers env
426+     closeAllForkers (ldbOpenHandlesLock  env) (ldbForkers env) 
425427
426428{- ------------------------------------------------------------------------------
427429  The LedgerDBEnv 
@@ -655,17 +657,16 @@ newForkerByRollback h rr n = getEnv h $ \ldbEnv ->
655657--  |  Close all open 'Forker's. 
656658closeAllForkers  :: 
657659  IOLike  m  => 
658-   LedgerDBEnv  m  l  blk  -> 
660+   RAWLock  m  LDBLock  -> 
661+   StrictTVar  m  (Map  ForkerKey  (ForkerEnv  m  l  blk )) -> 
659662  m  () 
660- closeAllForkers ldbEnv =  do 
661-   toClose <-  fmap  (ldbEnv,) <$>  (atomically $  stateTVar forkersVar (,Map. empty))
662-   mapM_  closeForkerEnv toClose
663-  where 
664-   forkersVar =  ldbForkers ldbEnv
663+ closeAllForkers lock forkersVar =  do 
664+   toClose <-  atomically $  swapTVar forkersVar Map. empty
665+   mapM_  (closeForkerEnv lock) toClose
665666
666- closeForkerEnv  ::  IOLike  m  =>  ( LedgerDBEnv  m  l   blk ,  ForkerEnv  m  l  blk )  ->  m  () 
667- closeForkerEnv ( LedgerDBEnv {ldbOpenHandlesLock},  frkEnv)  = 
668-   RAWLock. withWriteAccess ldbOpenHandlesLock  $ 
667+ closeForkerEnv  ::  IOLike  m  =>  RAWLock  m  LDBLock   ->  ForkerEnv  m  l  blk  ->  m  () 
668+ closeForkerEnv lock  frkEnv = 
669+   RAWLock. withWriteAccess lock  $ 
669670    const  $  do 
670671      id  =<<  (atomically $  swapTVar (snd  $  foeResourcesToRelease frkEnv) (pure  () ))
671672      _ <-  release (fst  (foeResourcesToRelease frkEnv))
@@ -729,11 +730,11 @@ implForkerClose (LDBHandle varState) forkerKey = do
729730      readTVar varState >>=  \ case 
730731        LedgerDBClosed  ->  pure  Nothing 
731732        LedgerDBOpen  ldbEnv -> 
732-           fmap  (ldbEnv,)
733+           fmap  (ldbOpenHandlesLock  ldbEnv,)
733734            <$>  stateTVar
734735              (ldbForkers ldbEnv)
735736              (Map. updateLookupWithKey (\ _ _ ->  Nothing ) forkerKey)
736-   whenJust menv closeForkerEnv
737+   whenJust menv ( uncurry   closeForkerEnv) 
737738
738739newForker  :: 
739740  ( IOLike  m 
0 commit comments