From ff172bdd3a0d5b2b97704980c204d154560f7c07 Mon Sep 17 00:00:00 2001 From: Roei Erez Date: Sat, 19 Jan 2019 13:35:33 +0200 Subject: [PATCH] proper cleanup neutrino database in case of error --- chainregistry.go | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/chainregistry.go b/chainregistry.go index 1d0c84da..eb0f35d7 100644 --- a/chainregistry.go +++ b/chainregistry.go @@ -249,9 +249,14 @@ func newChainControlFromConfig(cfg *config, chanDB *channeldb.DB, neutrino.BanDuration = 5 * time.Second svc, err := neutrino.NewChainService(config) if err != nil { + nodeDatabase.Close() return nil, nil, fmt.Errorf("unable to create neutrino: %v", err) } svc.Start() + cleanUp = func() { + svc.Stop() + nodeDatabase.Close() + } // Next we'll create the instances of the ChainNotifier and // FilteredChainView interface which is backed by the neutrino @@ -259,6 +264,7 @@ func newChainControlFromConfig(cfg *config, chanDB *channeldb.DB, cc.chainNotifier = neutrinonotify.New(svc, hintCache, hintCache) cc.chainView, err = chainview.NewCfFilteredChainView(svc) if err != nil { + cleanUp() return nil, nil, err } @@ -268,10 +274,6 @@ func newChainControlFromConfig(cfg *config, chanDB *channeldb.DB, walletConfig.ChainSource = chain.NewNeutrinoClient( activeNetParams.Params, svc, ) - cleanUp = func() { - svc.Stop() - nodeDatabase.Close() - } case "bitcoind", "litecoind": var bitcoindMode *bitcoindConfig switch { @@ -495,6 +497,9 @@ func newChainControlFromConfig(cfg *config, chanDB *channeldb.DB, wc, err := btcwallet.New(*walletConfig) if err != nil { fmt.Printf("unable to create wallet controller: %v\n", err) + if cleanUp != nil { + cleanUp() + } return nil, nil, err } @@ -530,10 +535,16 @@ func newChainControlFromConfig(cfg *config, chanDB *channeldb.DB, lnWallet, err := lnwallet.NewLightningWallet(walletCfg) if err != nil { fmt.Printf("unable to create wallet: %v\n", err) + if cleanUp != nil { + cleanUp() + } return nil, nil, err } if err := lnWallet.Startup(); err != nil { fmt.Printf("unable to start wallet: %v\n", err) + if cleanUp != nil { + cleanUp() + } return nil, nil, err }