From a539a4e079f830cdd4fc0198fa468001c5f595fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E9=B8=BB?= Date: Fri, 12 Jul 2024 17:53:55 +0800 Subject: [PATCH] fix(trace): limit channel buffer size in TCP and UDP tracing to avoid deadlock --- trace/tcp_ipv4.go | 2 +- trace/tcp_ipv6.go | 2 +- trace/udp.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/trace/tcp_ipv4.go b/trace/tcp_ipv4.go index 4bf1c29..01e27c5 100644 --- a/trace/tcp_ipv4.go +++ b/trace/tcp_ipv4.go @@ -264,7 +264,7 @@ func (t *TCPTracer) send(ttl int) error { return err } t.inflightRequestLock.Lock() - hopCh := make(chan Hop) + hopCh := make(chan Hop, 1) t.inflightRequest[int(sequenceNumber)] = hopCh t.inflightRequestLock.Unlock() /* diff --git a/trace/tcp_ipv6.go b/trace/tcp_ipv6.go index 801d1c9..f622a41 100644 --- a/trace/tcp_ipv6.go +++ b/trace/tcp_ipv6.go @@ -251,7 +251,7 @@ func (t *TCPTracerv6) send(ttl int) error { } // log.Println(ttl, sequenceNumber) t.inflightRequestLock.Lock() - hopCh := make(chan Hop) + hopCh := make(chan Hop, 1) t.inflightRequest[int(sequenceNumber)] = hopCh t.inflightRequestLock.Unlock() diff --git a/trace/udp.go b/trace/udp.go index 3f68401..e968ca1 100644 --- a/trace/udp.go +++ b/trace/udp.go @@ -225,7 +225,7 @@ func (t *UDPTracer) send(ttl int) error { // 在对inflightRequest进行写操作的时候应该加锁保护,以免多个goroutine协程试图同时写入造成panic t.inflightRequestLock.Lock() - hopCh := make(chan Hop) + hopCh := make(chan Hop, 1) t.inflightRequest[srcPort] = hopCh t.inflightRequestLock.Unlock() defer func() {