@@ -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