From 1dd67cb25a819e9b5a13a7d7f1bde711c4749cca Mon Sep 17 00:00:00 2001 From: Yacov Manevich Date: Tue, 25 Nov 2025 17:40:15 +0100 Subject: [PATCH] Cancel parent context when aborting bootstrapping Signed-off-by: Yacov Manevich --- chains/manager.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/chains/manager.go b/chains/manager.go index 7dd87437b284..438e8c0f017b 100644 --- a/chains/manager.go +++ b/chains/manager.go @@ -262,6 +262,8 @@ type manager struct { // processed. chainCreatorShutdownCh chan struct{} chainCreatorExited sync.WaitGroup + context context.Context + cancelContext context.CancelFunc chainsLock sync.Mutex // Key: Chain's ID @@ -324,7 +326,11 @@ func New(config *ManagerConfig) (Manager, error) { return nil, err } + ctx, cancelContext := context.WithCancel(context.Background()) + return &manager{ + context: ctx, + cancelContext: cancelContext, Aliaser: ids.NewAliaser(), ManagerConfig: *config, chains: make(map[ids.ID]handler.Handler), @@ -468,7 +474,7 @@ func (m *manager) createChain(chainParams ChainParameters) { // Tell the chain to start processing messages. // If the X, P, or C Chain panics, do not attempt to recover - chain.Handler.Start(context.TODO(), !m.CriticalChains.Contains(chainParams.ID)) + chain.Handler.Start(m.context, !m.CriticalChains.Contains(chainParams.ID)) } // Create a chain @@ -1523,6 +1529,7 @@ func (m *manager) Shutdown() { m.Log.Info("shutting down chain manager") m.chainsQueue.Close() close(m.chainCreatorShutdownCh) + m.cancelContext() m.chainCreatorExited.Wait() m.ManagerConfig.Router.Shutdown(context.TODO()) }