From c7bd9ccb888005e6d5d47cac4be8a05be97d5542 Mon Sep 17 00:00:00 2001 From: Janos Guljas Date: Tue, 5 Feb 2019 17:10:47 +0100 Subject: [PATCH] p2p/simulations, p2p/simulations/adapters: handle node close on shutdown --- p2p/simulations/adapters/inproc.go | 6 ++++++ p2p/simulations/network.go | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/p2p/simulations/adapters/inproc.go b/p2p/simulations/adapters/inproc.go index eada9579ed..bdfbf1c732 100644 --- a/p2p/simulations/adapters/inproc.go +++ b/p2p/simulations/adapters/inproc.go @@ -172,6 +172,12 @@ type SimNode struct { registerOnce sync.Once } +// Close closes the underlaying node.Node to release +// acquired resources. +func (sn *SimNode) Close() error { + return sn.node.Close() +} + // Addr returns the node's discovery address func (sn *SimNode) Addr() []byte { return []byte(sn.Node().String()) diff --git a/p2p/simulations/network.go b/p2p/simulations/network.go index 6edcefc532..c2a3b9647f 100644 --- a/p2p/simulations/network.go +++ b/p2p/simulations/network.go @@ -22,6 +22,7 @@ import ( "encoding/json" "errors" "fmt" + "io" "math/rand" "sync" "time" @@ -569,6 +570,12 @@ func (net *Network) Shutdown() { if err := node.Stop(); err != nil { log.Warn("Can't stop node", "id", node.ID(), "err", err) } + // If the node has the close method, call it. + if closer, ok := node.Node.(io.Closer); ok { + if err := closer.Close(); err != nil { + log.Warn("Can't close node", "id", node.ID(), "err", err) + } + } } close(net.quitc) }