From fa49161dd0f857cfa2b30058e4051d95e2893a6f Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Sat, 8 Aug 2020 11:43:12 +0200 Subject: [PATCH] Close TCP recvChan after all writes have completed Closes #260 --- tcp_packet_conn.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tcp_packet_conn.go b/tcp_packet_conn.go index 99a462d..264dea4 100644 --- a/tcp_packet_conn.go +++ b/tcp_packet_conn.go @@ -194,9 +194,10 @@ func (t *tcpPacketConn) removeConn(conn net.Conn) { func (t *tcpPacketConn) Close() error { t.mu.Lock() + var shouldCloseRecvChan bool t.closeOnce.Do(func() { close(t.closedChan) - close(t.recvChan) + shouldCloseRecvChan = true }) for _, conn := range t.conns { @@ -208,6 +209,10 @@ func (t *tcpPacketConn) Close() error { t.wg.Wait() + if shouldCloseRecvChan { + close(t.recvChan) + } + return nil }