mirror of
https://github.com/PeernetOfficial/core.git
synced 2026-07-17 02:47:51 +01:00
UDT: Fix race condition close of channel.
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user