From 9ceaa38f8ad214d0273aa042623f40dca0cfba90 Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Wed, 12 Jul 2023 21:55:34 +0000 Subject: [PATCH 1/2] nitro: fix defers on main process --- cmd/nitro/nitro.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/cmd/nitro/nitro.go b/cmd/nitro/nitro.go index f1af1388cf..6f49a67572 100644 --- a/cmd/nitro/nitro.go +++ b/cmd/nitro/nitro.go @@ -374,12 +374,18 @@ func mainImpl() int { return 1 } + var deferFuncs []func() + defer func() { + for i := range deferFuncs { + deferFuncs[i]() + } + }() + chainDb, l2BlockChain, err := openInitializeChainDb(ctx, stack, nodeConfig, new(big.Int).SetUint64(nodeConfig.L2.ChainID), execution.DefaultCacheConfigFor(stack, &nodeConfig.Node.Caching), l1Client, rollupAddrs) - defer closeDb(chainDb, "chainDb") if l2BlockChain != nil { - // Calling Stop on the blockchain multiple times does nothing - defer l2BlockChain.Stop() + deferFuncs = append(deferFuncs, func() { l2BlockChain.Stop() }) } + deferFuncs = append(deferFuncs, func() { closeDb(chainDb, "chainDb") }) if err != nil { flag.Usage() log.Error("error initializing database", "err", err) @@ -387,7 +393,7 @@ func mainImpl() int { } arbDb, err := stack.OpenDatabase("arbitrumdata", 0, 0, "", false) - defer closeDb(arbDb, "arbDb") + deferFuncs = append(deferFuncs, func() { closeDb(arbDb, "arbDb") }) if err != nil { log.Error("failed to open database", "err", err) return 1 @@ -479,7 +485,8 @@ func mainImpl() int { if err != nil { fatalErrChan <- fmt.Errorf("error starting node: %w", err) } - defer currentNode.StopAndWait() + // remove previous deferFuncs, StopAndWait closes dtabase and blockchain. + deferFuncs = []func(){func() { currentNode.StopAndWait() }} } sigint := make(chan os.Signal, 1) From 6dbaa5168221c3e42266dd275929727d6ea47982 Mon Sep 17 00:00:00 2001 From: Tsahi Zidenberg Date: Fri, 21 Jul 2023 13:32:37 -0600 Subject: [PATCH 2/2] fix typo in comment --- cmd/nitro/nitro.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/nitro/nitro.go b/cmd/nitro/nitro.go index 6f49a67572..55e83d2456 100644 --- a/cmd/nitro/nitro.go +++ b/cmd/nitro/nitro.go @@ -485,7 +485,7 @@ func mainImpl() int { if err != nil { fatalErrChan <- fmt.Errorf("error starting node: %w", err) } - // remove previous deferFuncs, StopAndWait closes dtabase and blockchain. + // remove previous deferFuncs, StopAndWait closes database and blockchain. deferFuncs = []func(){func() { currentNode.StopAndWait() }} }