From 173ef830640cf46ae88cd64f974fe4e7ecbb64ed Mon Sep 17 00:00:00 2001 From: "M. Mert Yildiran" Date: Thu, 2 Jun 2022 23:40:05 +0300 Subject: [PATCH] Fix `panic: send on closed channel` --- tap/tlstapper/golang_reader.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tap/tlstapper/golang_reader.go b/tap/tlstapper/golang_reader.go index 62a98d555..2f749065e 100644 --- a/tap/tlstapper/golang_reader.go +++ b/tap/tlstapper/golang_reader.go @@ -2,6 +2,7 @@ package tlstapper import ( "io" + "sync" "time" "github.com/up9inc/mizu/tap/api" @@ -20,6 +21,7 @@ type golangReader struct { counterPair *api.CounterPair parent *tlsStream reqResMatcher api.RequestResponseMatcher + sync.Mutex } func NewGolangReader(extension *api.Extension, isClient bool, emitter api.Emitter, counterPair *api.CounterPair, stream *tlsStream, reqResMatcher api.RequestResponseMatcher) *golangReader { @@ -38,15 +40,21 @@ func NewGolangReader(extension *api.Extension, isClient bool, emitter api.Emitte } func (r *golangReader) send(b []byte) { - r.captureTime = time.Now() - r.msgQueue <- b + r.Lock() + if !r.isClosed { + r.captureTime = time.Now() + r.msgQueue <- b + } + r.Unlock() } func (r *golangReader) close() { + r.Lock() if !r.isClosed { r.isClosed = true close(r.msgQueue) } + r.Unlock() } func (r *golangReader) Read(p []byte) (int, error) {