@ -52,6 +52,7 @@ func (t *Transport) Addr() net.Addr {
type NodeTransport struct {
*raft.NetworkTransport
done chan struct{}
closed bool
}
// NewNodeTransport returns an initialized NodeTransport.
@ -64,6 +65,11 @@ func NewNodeTransport(transport *raft.NetworkTransport) *NodeTransport {
// Close closes the transport
func (n *NodeTransport) Close() error {
if n.closed {
return nil
n.closed = true
close(n.done)
if n.NetworkTransport == nil {
@ -18,4 +18,7 @@ func Test_NewNodeTransport(t *testing.T) {
if err := nt.Close(); err != nil {
t.Fatalf("failed to close NodeTransport: %s", err.Error())
t.Fatalf("failed to double-close NodeTransport: %s", err.Error())