put back packet buffers after processing a packet

This introduces a reference counter in the packet buffer, which will be
used to process coalesced packets.
This commit is contained in:
Marten Seemann
2018-12-26 20:57:30 +06:30
parent 413844d0bc
commit 767dbdd545
9 changed files with 135 additions and 71 deletions

View File

@@ -318,21 +318,27 @@ func (s *server) handlePacket(p *receivedPacket) {
}
if hdr.Type == protocol.PacketTypeInitial {
go s.handleInitial(p)
return
}
putPacketBuffer(p.buffer)
// TODO(#943): send Stateless Reset
}
func (s *server) handleInitial(p *receivedPacket) {
// TODO: add a check that DestConnID == SrcConnID
s.logger.Debugf("<- Received Initial packet.")
sess, connID, err := s.handleInitialImpl(p)
if err != nil {
putPacketBuffer(p.buffer)
s.logger.Errorf("Error occurred handling initial packet: %s", err)
return
}
if sess == nil { // a retry was done
putPacketBuffer(p.buffer)
return
}
// Don't put the packet buffer back if a new session was created.
// The session will handle the packet and take of that.
serverSession := newServerSession(sess, s.config, s.logger)
s.sessionHandler.Add(connID, serverSession)
}
@@ -455,6 +461,7 @@ func (s *server) sendRetry(remoteAddr net.Addr, hdr *wire.Header) error {
}
func (s *server) sendVersionNegotiationPacket(p *receivedPacket) {
defer putPacketBuffer(p.buffer)
hdr := p.hdr
s.logger.Debugf("Client offered version %s, sending Version Negotiation", hdr.Version)
data, err := wire.ComposeVersionNegotiation(hdr.SrcConnectionID, hdr.DestConnectionID, s.config.Versions)