From 700fc3058684eb58c08fcc26a0114f10f322e3b8 Mon Sep 17 00:00:00 2001 From: Kleissner Date: Mon, 17 Jan 2022 17:00:05 +0100 Subject: [PATCH] UDT: Minor ticker change in recv. Make sure it is always closed. --- udt/udtsocket_recv.go | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/udt/udtsocket_recv.go b/udt/udtsocket_recv.go index 112118b..36f9efa 100644 --- a/udt/udtsocket_recv.go +++ b/udt/udtsocket_recv.go @@ -35,22 +35,22 @@ type udtSocketRecv struct { func newUdtSocketRecv(s *udtSocket) *udtSocketRecv { sr := &udtSocketRecv{ - socket: s, - sockClosed: s.sockClosed, - recvEvent: s.recvEvent, - messageIn: s.messageIn, - sendPacket: s.sendPacket, - recvPktPend: createPacketHeap(), - recvLossList: createPacketIDHeap(), - ackHistory: createHistoryHeap(), - resendACKTimer: make(chan time.Time), + socket: s, + sockClosed: s.sockClosed, + recvEvent: s.recvEvent, + messageIn: s.messageIn, + sendPacket: s.sendPacket, + recvPktPend: createPacketHeap(), + recvLossList: createPacketIDHeap(), + ackHistory: createHistoryHeap(), } - go sr.goReceiveEvent() // set the timer for constantly resending ACKs for the highest sequence ID and NAKs for missing packets sr.resendACKTicker = *time.NewTicker(s.Config.SynTime) sr.resendACKTimer = sr.resendACKTicker.C + go sr.goReceiveEvent() + return sr } @@ -62,6 +62,8 @@ func (s *udtSocketRecv) configureHandshake(p *packet.HandshakePacket) { } func (s *udtSocketRecv) goReceiveEvent() { + defer s.resendACKTicker.Stop() + recvEvent := s.recvEvent sockClosed := s.sockClosed for { @@ -81,7 +83,6 @@ func (s *udtSocketRecv) goReceiveEvent() { s.ingestError(sp) } case <-sockClosed: // socket is closed, leave now - s.resendACKTicker.Stop() return case <-s.resendACKTimer: // handles both resending ACKs and NAKs if s.recvAck2.IsLess(s.sentAck) {