diff --git a/store/transport.go b/store/transport.go index f9e41a7a..a4e6ce50 100644 --- a/store/transport.go +++ b/store/transport.go @@ -51,7 +51,8 @@ func (t *Transport) Addr() net.Addr { // custom configuration of the InstallSnapshot method. type NodeTransport struct { *raft.NetworkTransport - done chan struct{} + 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 { return nil diff --git a/store/transport_test.go b/store/transport_test.go index 97520422..041168c9 100644 --- a/store/transport_test.go +++ b/store/transport_test.go @@ -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()) } + if err := nt.Close(); err != nil { + t.Fatalf("failed to double-close NodeTransport: %s", err.Error()) + } }