From 57eabce89938bde420c1b6452dda571948cd1b07 Mon Sep 17 00:00:00 2001 From: Philip O'Toole Date: Sat, 2 Sep 2023 10:07:36 -0400 Subject: [PATCH] Protect against double-close of NodeTransport --- store/transport.go | 8 +++++++- store/transport_test.go | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) 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()) + } }