From ff24b603d06732ca4d3f3e912dd5f449cdc477cf Mon Sep 17 00:00:00 2001 From: Lewis Marshall Date: Thu, 4 May 2017 09:25:27 +0100 Subject: [PATCH] p2p/simulations: Don't allow connections to stopped SimNodes Signed-off-by: Lewis Marshall --- p2p/simulations/adapters/inproc.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/p2p/simulations/adapters/inproc.go b/p2p/simulations/adapters/inproc.go index bfbba74eeb..343e6b850c 100644 --- a/p2p/simulations/adapters/inproc.go +++ b/p2p/simulations/adapters/inproc.go @@ -154,6 +154,14 @@ func (self *SimNode) Stop() error { return self.service.Stop() } +// Running returns whether or not the service is running by checking if the +// RPC client is set +func (self *SimNode) Running() bool { + self.lock.Lock() + defer self.lock.Unlock() + return self.client != nil +} + // Service returns the underlying node.Service func (self *SimNode) Service() node.Service { return self.service @@ -234,9 +242,12 @@ func (self *SimNode) AddPeer(peer *discover.Node) { if !exists { panic(fmt.Sprintf("unknown peer: %s", peer.ID)) } + if !peerNode.Running() { + return + } p1, p2 := p2p.MsgPipe() - localRW := NewMsgReporter(p1, &self.peerFeed, peer.ID) - peerRW := NewMsgReporter(p2, &self.peerFeed, self.Id.NodeID) + localRW := p2p.NewMsgEventer(p1, &self.peerFeed, peer.ID) + peerRW := p2p.NewMsgEventer(p2, &self.peerFeed, self.Id.NodeID) self.peers[peer.ID] = peerRW peerNode.RunProtocol(self, peerRW) self.RunProtocol(peerNode, localRW)