p2p/simulations, p2p/simulations/adapters: handle node close on shutdown

This commit is contained in:
Janos Guljas 2019-02-05 17:10:47 +01:00
parent e582efd782
commit c7bd9ccb88
2 changed files with 13 additions and 0 deletions

View file

@ -172,6 +172,12 @@ type SimNode struct {
registerOnce sync.Once 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 // Addr returns the node's discovery address
func (sn *SimNode) Addr() []byte { func (sn *SimNode) Addr() []byte {
return []byte(sn.Node().String()) return []byte(sn.Node().String())

View file

@ -22,6 +22,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"io"
"math/rand" "math/rand"
"sync" "sync"
"time" "time"
@ -569,6 +570,12 @@ func (net *Network) Shutdown() {
if err := node.Stop(); err != nil { if err := node.Stop(); err != nil {
log.Warn("Can't stop node", "id", node.ID(), "err", err) 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) close(net.quitc)
} }