File tree Expand file tree Collapse file tree 3 files changed +23
-10
lines changed
ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Storage/LedgerDB Expand file tree Collapse file tree 3 files changed +23
-10
lines changed Original file line number Diff line number Diff line change @@ -705,7 +705,7 @@ closeAllForkers forkersVar = do
705705 forkerEnvs <- Map. elems <$> readTVar forkersVar
706706 writeTVar forkersVar Map. empty
707707 return forkerEnvs
708- mapM_ closeForkerEnv forkerEnvs
708+ mapM_ ( closeForkerEnv True ) forkerEnvs
709709
710710-- | Acquire both a value handle and a db changelog at the tip. Holds a read lock
711711-- while doing so.
@@ -822,4 +822,4 @@ implForkerClose (LDBHandle varState) forkerKey = do
822822 stateTVar
823823 (ldbForkers ldbEnv)
824824 (Map. updateLookupWithKey (\ _ _ -> Nothing ) forkerKey)
825- whenJust envMay closeForkerEnv
825+ whenJust envMay ( closeForkerEnv False )
Original file line number Diff line number Diff line change @@ -90,9 +90,17 @@ deriving instance
9090 Close
9191-------------------------------------------------------------------------------}
9292
93- closeForkerEnv :: IOLike m => ForkerEnv m l blk -> m ()
94- closeForkerEnv ForkerEnv {foeBackingStoreValueHandle} = do
95- either (\ (l, _, _) -> atomically . unsafeReleaseReadAccess $ l) (Monad. void . release . fst )
93+ closeForkerEnv :: IOLike m => Bool -> ForkerEnv m l blk -> m ()
94+ closeForkerEnv closingAll ForkerEnv {foeBackingStoreValueHandle} = do
95+ either
96+ (\ (l, _, _) -> atomically . unsafeReleaseReadAccess $ l)
97+ ( Monad. void
98+ -- During shutdown, we will close all forkers from the main thread
99+ -- instead of from the thread that opened the forker, hence we need
100+ -- unsafeRelease.
101+ . (if closingAll then unsafeRelease else release)
102+ . fst
103+ )
96104 =<< takeMVar foeBackingStoreValueHandle
97105
98106{- ------------------------------------------------------------------------------
Original file line number Diff line number Diff line change @@ -662,14 +662,19 @@ closeAllForkers ::
662662 m ()
663663closeAllForkers lock forkersVar = do
664664 toClose <- atomically $ swapTVar forkersVar Map. empty
665- mapM_ (closeForkerEnv lock) toClose
665+ mapM_ (closeForkerEnv True lock) toClose
666666
667- closeForkerEnv :: IOLike m => RAWLock m LDBLock -> ForkerEnv m l blk -> m ()
668- closeForkerEnv lock frkEnv =
667+ closeForkerEnv :: IOLike m => Bool -> RAWLock m LDBLock -> ForkerEnv m l blk -> m ()
668+ closeForkerEnv closingAll lock frkEnv =
669669 RAWLock. withWriteAccess lock $
670670 const $ do
671671 id =<< (atomically $ swapTVar (snd $ foeResourcesToRelease frkEnv) (pure () ))
672- _ <- release (fst (foeResourcesToRelease frkEnv))
672+ _ <-
673+ -- During shutdown, we will close all forkers from the main thread
674+ -- instead of from the thread that opened the forker, hence we need
675+ -- unsafeRelease.
676+ (if closingAll then unsafeRelease else release)
677+ (fst (foeResourcesToRelease frkEnv))
673678 pure (() , LDBLock )
674679
675680getForkerEnv ::
@@ -734,7 +739,7 @@ implForkerClose (LDBHandle varState) forkerKey = do
734739 <$> stateTVar
735740 (ldbForkers ldbEnv)
736741 (Map. updateLookupWithKey (\ _ _ -> Nothing ) forkerKey)
737- whenJust menv (uncurry closeForkerEnv)
742+ whenJust menv (uncurry ( closeForkerEnv False ) )
738743
739744newForker ::
740745 ( IOLike m
You can’t perform that action at this time.
0 commit comments