From ebecca64a1a724c7edce506fe8a1350d0398d980 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Wed, 8 Jul 2020 20:56:03 +0200 Subject: [PATCH] Fix daemon shutdown Signed-off-by: Jakub Sztandera --- cmd/lotus/rpc.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/cmd/lotus/rpc.go b/cmd/lotus/rpc.go index 9b942c523..c7a242f8e 100644 --- a/cmd/lotus/rpc.go +++ b/cmd/lotus/rpc.go @@ -63,6 +63,7 @@ func serveRPC(a api.FullNode, stop node.StopFunc, addr multiaddr.Multiaddr, shut srv := &http.Server{Handler: http.DefaultServeMux} sigCh := make(chan os.Signal, 2) + shutdownDone := make(chan struct{}) go func() { select { case <-sigCh: @@ -77,10 +78,17 @@ func serveRPC(a api.FullNode, stop node.StopFunc, addr multiaddr.Multiaddr, shut log.Errorf("graceful shutting down failed: %s", err) } log.Warn("Graceful shutdown successful") + log.Sync() + close(shutdownDone) }() signal.Notify(sigCh, syscall.SIGTERM, syscall.SIGINT) - return srv.Serve(manet.NetListener(lst)) + err = srv.Serve(manet.NetListener(lst)) + if err == http.ErrServerClosed { + <-shutdownDone + return nil + } + return err } func handleImport(a *impl.FullNodeAPI) func(w http.ResponseWriter, r *http.Request) {