mirror of
https://github.com/PeernetOfficial/core.git
synced 2026-07-18 19:17:51 +01:00
UDT: Minor ticker change in recv. Make sure it is always closed.
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user