From 96779c965e167a5df891760e188c8135fe07835d Mon Sep 17 00:00:00 2001 From: Elle Mouton Date: Sun, 21 May 2023 19:10:54 +0200 Subject: [PATCH] terminal: only shutdown sub-servers on shutdown --- terminal.go | 48 +++++++++++++++++------------------------------- 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/terminal.go b/terminal.go index 818f4a3c..a4ac4afd 100644 --- a/terminal.go +++ b/terminal.go @@ -287,16 +287,9 @@ func (g *LightningTerminal) Run() error { <-shutdownInterceptor.ShutdownChannel() log.Infof("Shutdown signal received") - if g.rpcProxy != nil { - if err := g.rpcProxy.Stop(); err != nil { - log.Errorf("Error stopping rpc proxy: %v", err) - } - } - - if g.httpServer != nil { - if err := g.httpServer.Close(); err != nil { - log.Errorf("Error stopping UI server: %v", err) - } + err = g.shutdownSubServers() + if err != nil { + log.Errorf("Error shutting down: %v", err) } g.wg.Wait() @@ -501,27 +494,6 @@ func (g *LightningTerminal) start() error { return fmt.Errorf("received the shutdown signal") } - // We now know that starting lnd was successful. If we now run into an - // error, we must shut down lnd correctly. - defer func() { - err := g.shutdownSubServers() - if err != nil { - log.Errorf("Error shutting down: %v", err) - } - - if g.rpcProxy != nil { - if err := g.rpcProxy.Stop(); err != nil { - log.Errorf("Error stopping rpc proxy: %v", err) - } - } - - if g.httpServer != nil { - if err := g.httpServer.Close(); err != nil { - log.Errorf("Error stopping UI server: %v", err) - } - } - }() - // Connect to LND. g.lndConn, err = connectLND(g.cfg, bufRpcListener) if err != nil { @@ -1207,6 +1179,20 @@ func (g *LightningTerminal) shutdownSubServers() error { } } + if g.rpcProxy != nil { + if err := g.rpcProxy.Stop(); err != nil { + log.Errorf("Error stopping rpc proxy: %v", err) + returnErr = err + } + } + + if g.httpServer != nil { + if err := g.httpServer.Close(); err != nil { + log.Errorf("Error stopping UI server: %v", err) + returnErr = err + } + } + // Do we have any last errors to display? We use an anonymous function, // so we can use return instead of breaking to a label in the default // case.