diff --git a/tap/tlstapper/golang_reader.go b/tap/tlstapper/golang_reader.go index 4ac081045..cd0a9b489 100644 --- a/tap/tlstapper/golang_reader.go +++ b/tap/tlstapper/golang_reader.go @@ -13,6 +13,7 @@ type golangReader struct { data []byte progress *api.ReadProgress tcpID *api.TcpID + isClosed bool isClient bool captureTime time.Time extension *api.Extension @@ -42,6 +43,13 @@ func (r *golangReader) send(b []byte) { r.msgQueue <- b } +func (r *golangReader) close() { + if !r.isClosed { + r.isClosed = true + close(r.msgQueue) + } +} + func (r *golangReader) Read(p []byte) (int, error) { var b []byte diff --git a/tap/tlstapper/tls_poller.go b/tap/tlstapper/tls_poller.go index 0bb5eb82f..d7fa0ac5b 100644 --- a/tap/tlstapper/tls_poller.go +++ b/tap/tlstapper/tls_poller.go @@ -139,6 +139,15 @@ func (p *tlsPoller) pollGolangReadWrite(rd *ringbuf.Reader, emitter api.Emitter, if p.golangReadWriteMap.Len()+1 > golangMapLimit { pair := p.golangReadWriteMap.Oldest() + c := pair.Value.(*golangConnection) + clientReader := c.clientReader + if clientReader != nil { + clientReader.close() + } + serverReader := c.serverReader + if serverReader != nil { + serverReader.close() + } p.golangReadWriteMap.Delete(pair.Key) }