From 699a995e8c470a42f0127ecb045ab3fcdc120c33 Mon Sep 17 00:00:00 2001 From: Alex X Date: Tue, 8 Apr 2025 11:33:04 +0300 Subject: [PATCH] Fix deadlock on write to track channel --- pkg/core/track.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pkg/core/track.go b/pkg/core/track.go index 3f548b85..08765659 100644 --- a/pkg/core/track.go +++ b/pkg/core/track.go @@ -97,13 +97,17 @@ func NewSender(media *Media, codec *Codec) *Sender { buf: buf, } s.Input = func(packet *Packet) { - // writing to nil chan - OK, writing to closed chan - panic s.mu.Lock() - select { - case s.buf <- packet: - s.Bytes += len(packet.Payload) - s.Packets++ - default: + if s.buf != nil { + // unblocked write to channel + select { + case s.buf <- packet: + s.Bytes += len(packet.Payload) + s.Packets++ + default: + s.Drops++ + } + } else { s.Drops++ } s.mu.Unlock()