@@ -41,6 +41,7 @@ import Cardano.Node.Configuration.Socket (LocalSocketOrSocketInfo,
4141import Cardano.Node.Configuration.TopologyP2P
4242import qualified Cardano.Node.Configuration.TopologyP2P as TopologyP2P
4343import Cardano.Node.Handlers.Shutdown
44+ import Cardano.Node.Handlers.TopLevel (SigTermPhase (.. ), installSigTermHandler )
4445import Cardano.Node.Protocol (ProtocolInstantiationError (.. ), mkConsensusProtocol )
4546import Cardano.Node.Protocol.Byron (ByronProtocolInstantiationError (CredentialsError ))
4647import Cardano.Node.Protocol.Cardano (CardanoProtocolInstantiationError (.. ))
@@ -58,7 +59,7 @@ import Cardano.Node.Tracing.StateRep (NodeState (NodeKernelOnline))
5859import Cardano.Node.Tracing.Tracers.NodeVersion (getNodeVersion )
5960import Cardano.Node.Tracing.Tracers.Startup (getStartupInfo )
6061import Cardano.Node.Types
61- import Cardano.Prelude (ExitCode ( .. ), FatalError (.. ), bool , (:~:) (.. ))
62+ import Cardano.Prelude (FatalError (.. ), bool , (:~:) (.. ))
6263import Cardano.Slotting.Slot (WithOrigin (.. ))
6364import Cardano.Logging.Types (LogFormatting )
6465import Cardano.Logging.Utils (showT )
@@ -122,7 +123,7 @@ import Ouroboros.Network.PeerSelection.State.LocalRootPeers (HotValenc
122123import Ouroboros.Network.Protocol.ChainSync.Codec
123124
124125import Control.Applicative (empty )
125- import Control.Concurrent (killThread , mkWeakThreadId , myThreadId , getNumCapabilities )
126+ import Control.Concurrent (killThread , getNumCapabilities )
126127import Control.Concurrent.Async
127128import Control.Concurrent.Class.MonadSTM.Strict
128129import Control.Exception (try , Exception , IOException )
@@ -157,7 +158,6 @@ import System.Directory (canonicalizePath, createDirectoryIfMissing, m
157158import System.FilePath (takeDirectory , (</>) )
158159import System.IO (hPutStrLn )
159160#ifdef UNIX
160- import GHC.Weak (deRefWeak )
161161import System.Posix.Files
162162import qualified System.Posix.Signals as Signals
163163import System.Posix.Types (FileMode )
@@ -175,7 +175,7 @@ runNode
175175 :: PartialNodeConfiguration
176176 -> IO ()
177177runNode cmdPc = do
178- installSigTermHandler
178+ installSigTermHandler SigTermDuringStartup
179179
180180 Crypto. cryptoInit
181181
@@ -214,24 +214,6 @@ buildNodeConfiguration partialConf = do
214214 pure
215215 $ makeNodeConfiguration (defaultPartialNodeConfiguration <> configYamlPc <> partialConf)
216216
217- -- | Workaround to ensure that the main thread throws an async exception on
218- -- receiving a SIGTERM signal.
219- installSigTermHandler :: IO ()
220- installSigTermHandler = do
221- #ifdef UNIX
222- -- Similar implementation to the RTS's handling of SIGINT (see GHC's
223- -- https://gitlab.haskell.org/ghc/ghc/-/blob/master/libraries/base/GHC/TopHandler.hs).
224- runThreadIdWk <- mkWeakThreadId =<< myThreadId
225- _ <- Signals. installHandler
226- Signals. sigTERM
227- (Signals. CatchOnce $ do
228- runThreadIdMay <- deRefWeak runThreadIdWk
229- forM_ runThreadIdMay $ \ runThreadId -> Exception. throwTo runThreadId ExitSuccess
230- )
231- Nothing
232- #endif
233- return ()
234-
235217handleNodeWithTracers
236218 :: PartialNodeConfiguration
237219 -> NodeConfiguration
@@ -449,6 +431,7 @@ handleSimpleNode blockType runP tracers nc cmdPc networkMagic onKernel = do
449431#endif
450432 nForkPolicy <- getForkPolicy $ ncResponderCoreAffinityPolicy nc
451433 cForkPolicy <- getForkPolicy $ ncResponderCoreAffinityPolicy nc
434+ installSigTermHandler SigTermDuringRuntime
452435 void $
453436 let diffusionNodeArguments :: Cardano.Diffusion. CardanoNodeArguments IO
454437 diffusionNodeArguments = Cardano.Diffusion. CardanoNodeArguments {
0 commit comments