From 0a80791358c1cb67e8012c9ffad5f945a657016a Mon Sep 17 00:00:00 2001 From: Fridrik Asmundsson Date: Sun, 19 Jan 2025 18:21:54 -0500 Subject: [PATCH] fix: handle sigterm properly in case genesis is in the future --- consensus/cometbft/service/service.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/consensus/cometbft/service/service.go b/consensus/cometbft/service/service.go index 74d24a61d..33e593d5f 100644 --- a/consensus/cometbft/service/service.go +++ b/consensus/cometbft/service/service.go @@ -184,7 +184,24 @@ func (s *Service[_]) Start( return err } - return s.node.Start() + started := make(chan struct{}) + + // we start the node in a goroutine since calling Start() can block if genesis + // time is in the future causing us not to handle signals gracefully. + go func() { + err = s.node.Start() + started <- struct{}{} + }() + + select { + case <-ctx.Done(): + return ctx.Err() + case <-started: + } + + close(started) + + return err } func (s *Service[_]) Stop() error {