From 7c2e938684b205c39310a41f9d9356d517867c2d Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 15 Dec 2020 15:20:13 +0700 Subject: [PATCH] trace when a packet is dropped because the receivedPackets chan is full --- session.go | 3 +++ session_test.go | 14 +++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/session.go b/session.go index afc9e8bd3..68a6cecca 100644 --- a/session.go +++ b/session.go @@ -1117,6 +1117,9 @@ func (s *session) handlePacket(p *receivedPacket) { select { case s.receivedPackets <- p: default: + if s.tracer != nil { + s.tracer.DroppedPacket(logging.PacketTypeNotDetermined, p.Size(), logging.PacketDropDOSPrevention) + } } } diff --git a/session_test.go b/session_test.go index 09c513d61..18df9a871 100644 --- a/session_test.go +++ b/session_test.go @@ -2092,13 +2092,17 @@ var _ = Describe("Session", func() { }) }) - It("stores up to MaxSessionUnprocessedPackets packets", func(done Done) { + It("stores up to MaxSessionUnprocessedPackets packets", func() { + done := make(chan struct{}) + tracer.EXPECT().DroppedPacket(logging.PacketTypeNotDetermined, logging.ByteCount(6), logging.PacketDropDOSPrevention).Do(func(logging.PacketType, logging.ByteCount, logging.PacketDropReason) { + close(done) + }) // Nothing here should block - for i := protocol.PacketNumber(0); i < protocol.MaxSessionUnprocessedPackets+10; i++ { - sess.handlePacket(&receivedPacket{}) + for i := protocol.PacketNumber(0); i < protocol.MaxSessionUnprocessedPackets+1; i++ { + sess.handlePacket(&receivedPacket{data: []byte("foobar")}) } - close(done) - }, 0.5) + Eventually(done).Should(BeClosed()) + }) Context("getting streams", func() { It("opens streams", func() {