From 71cd90274c4d4d080914c5fae48e5139faa06aaf Mon Sep 17 00:00:00 2001 From: Kleissner Date: Sat, 26 Feb 2022 17:42:46 +0100 Subject: [PATCH] UDT: Fix race condition close of channel. --- udt/udtsocket.go | 1 - udt/udtsocket_recv.go | 8 +------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/udt/udtsocket.go b/udt/udtsocket.go index 56a9cb1..5e791d2 100644 --- a/udt/udtsocket.go +++ b/udt/udtsocket.go @@ -657,7 +657,6 @@ func (s *udtSocket) shutdown(sockState sockState, permitLinger bool, err error, s.connTimeout = nil s.connRetry = nil close(s.sockClosed) - close(s.recvEvent) s.m.closer.Close(reason) diff --git a/udt/udtsocket_recv.go b/udt/udtsocket_recv.go index 551d1e5..6d32b45 100644 --- a/udt/udtsocket_recv.go +++ b/udt/udtsocket_recv.go @@ -8,7 +8,6 @@ import ( type udtSocketRecv struct { // channels - recvEvent <-chan recvPktEvent // receiver: ingest the specified packet. Sender is readPacket, receiver is goReceiveEvent messageIn chan<- []byte // inbound messages. Sender is goReceiveEvent->ingestData, Receiver is client caller (Read) sendPacket chan<- packet.Packet // send a packet out on the wire socket *udtSocket @@ -38,7 +37,6 @@ type udtSocketRecv struct { func newUdtSocketRecv(s *udtSocket) *udtSocketRecv { sr := &udtSocketRecv{ socket: s, - recvEvent: s.recvEvent, messageIn: s.messageIn, sendPacket: s.sendPacket, recvPktPend: createPacketHeap(), @@ -67,13 +65,9 @@ func (s *udtSocketRecv) configureHandshake(p *packet.HandshakePacket) { func (s *udtSocketRecv) goReceiveEvent() { defer s.resendACKTicker.Stop() - recvEvent := s.recvEvent for { select { - case evt, ok := <-recvEvent: - if !ok { - return - } + case evt := <-s.socket.recvEvent: switch sp := evt.pkt.(type) { case *packet.Ack2Packet: s.ingestAck2(sp, evt.now)