diff --git a/node/node.go b/node/node.go index c35a509723..d0df39f6e8 100644 --- a/node/node.go +++ b/node/node.go @@ -121,6 +121,32 @@ func New(conf *Config) (*Node, error) { }, nil } +// Close releases resources acquired in Node constructor New. +func (n *Node) Close() error { + n.lock.Lock() + defer n.lock.Unlock() + + // Close account manager + var accmanErr error + if n.accman != nil { + accmanErr = n.accman.Close() + if accmanErr == nil { + n.accman = nil + } + } + + // Remove the keystore if it was created ephemerally. + var keystoreErr error + if n.ephemeralKeystore != "" { + keystoreErr = os.RemoveAll(n.ephemeralKeystore) + } + + if accmanErr != nil { + return accmanErr + } + return keystoreErr +} + // 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 { @@ -435,18 +461,9 @@ func (n *Node) Stop() error { // unblock n.Wait close(n.stop) - // Remove the keystore if it was created ephemerally. - var keystoreErr error - if n.ephemeralKeystore != "" { - keystoreErr = os.RemoveAll(n.ephemeralKeystore) - } - if len(failure.Services) > 0 { return failure } - if keystoreErr != nil { - return keystoreErr - } return nil }