From d2a437ecaca1bbe25d6ec5ea5ae3c864ac3699ca Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 29 Jan 2016 11:27:52 +0100 Subject: [PATCH] node: stop p2p.Server before stopping services This prevents printing of a gazillion error messages which result from connections trying to interact with stopped core services. --- node/node.go | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/node/node.go b/node/node.go index 4af111a410..c71cab519d 100644 --- a/node/node.go +++ b/node/node.go @@ -178,25 +178,23 @@ func (n *Node) Stop() error { n.lock.Lock() defer n.lock.Unlock() - // Short circuit if the node's not running if n.server == nil { return ErrNodeStopped } - // Otherwise terminate all the services and the P2P server too - failure := &StopError{ - Services: make(map[reflect.Type]error), - } + + // Stop the server first. This will block until all connections + // are done interacting. + n.server.Stop() + // Stop all services. + failure := &StopError{Services: make(map[reflect.Type]error)} for kind, service := range n.services { if err := service.Stop(); err != nil { failure.Services[kind] = err } } - n.server.Stop() - n.services = nil n.server = nil close(n.stop) - if len(failure.Services) > 0 { return failure }