1
0
Fork 0

Protect against double-close of NodeTransport

master
Philip O'Toole 1 year ago
parent 365abac57c
commit 57eabce899

@ -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 {
return 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())
}
if err := nt.Close(); err != nil {
t.Fatalf("failed to double-close NodeTransport: %s", err.Error())
}
}

Loading…
Cancel
Save