aboutsummaryrefslogtreecommitdiffstats
path: root/node/node.go
diff options
context:
space:
mode:
authorJanoš Guljaš <janos@users.noreply.github.com>2019-02-07 18:40:36 +0800
committerPéter Szilágyi <peterke@gmail.com>2019-02-07 18:40:36 +0800
commit26aea736736dc70257b1c11676f626ab775e9339 (patch)
tree93d60a587905e6f5ac170d71fb0c78127ec75d27 /node/node.go
parent81801ccc2b5444ebcf05bf1cf1562fc7a7c2b93e (diff)
downloadgo-tangerine-26aea736736dc70257b1c11676f626ab775e9339.tar
go-tangerine-26aea736736dc70257b1c11676f626ab775e9339.tar.gz
go-tangerine-26aea736736dc70257b1c11676f626ab775e9339.tar.bz2
go-tangerine-26aea736736dc70257b1c11676f626ab775e9339.tar.lz
go-tangerine-26aea736736dc70257b1c11676f626ab775e9339.tar.xz
go-tangerine-26aea736736dc70257b1c11676f626ab775e9339.tar.zst
go-tangerine-26aea736736dc70257b1c11676f626ab775e9339.zip
cmd, node, p2p/simulations: fix node account manager leak (#19004)
* node: close AccountsManager in new Close method * p2p/simulations, p2p/simulations/adapters: handle node close on shutdown * node: move node ephemeralKeystore cleanup to stop method * node: call Stop in Node.Close method * cmd/geth: close node.Node created with makeFullNode in cli commands * node: close Node instances in tests * cmd/geth, node: minor code style fixes * cmd, console, miner, mobile: proper node Close() termination
Diffstat (limited to 'node/node.go')
-rw-r--r--node/node.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/node/node.go b/node/node.go
index c35a50972..f267cdc46 100644
--- a/node/node.go
+++ b/node/node.go
@@ -121,6 +121,29 @@ func New(conf *Config) (*Node, error) {
}, nil
}
+// Close stops the Node and releases resources acquired in
+// Node constructor New.
+func (n *Node) Close() error {
+ var errs []error
+
+ // Terminate all subsystems and collect any errors
+ if err := n.Stop(); err != nil && err != ErrNodeStopped {
+ errs = append(errs, err)
+ }
+ if err := n.accman.Close(); err != nil {
+ errs = append(errs, err)
+ }
+ // Report any errors that might have occurred
+ switch len(errs) {
+ case 0:
+ return nil
+ case 1:
+ return errs[0]
+ default:
+ return fmt.Errorf("%v", errs)
+ }
+}
+
// Register injects a new service into the node's stack. The service created by
// the passed constructor must be unique in its type with regard to sibling ones.
func (n *Node) Register(constructor ServiceConstructor) error {