diff --git a/pkg/core/track.go b/pkg/core/track.go index d3f1467d..75efd61c 100644 --- a/pkg/core/track.go +++ b/pkg/core/track.go @@ -139,22 +139,29 @@ func (s *Sender) Start() { } s.done = make(chan struct{}) - go func() { - // for range on nil chan is OK - for packet := range s.buf { + // pass buf directly so that it's impossible for buf to be nil + go func(buf chan *Packet) { + for packet := range buf { s.Output(packet) } close(s.done) - }() + }(s.buf) } func (s *Sender) Wait() { - if done := s.done; done != nil { + s.mu.Lock() + done := s.done + s.mu.Unlock() + + if done != nil { <-done } } func (s *Sender) State() string { + s.mu.Lock() + defer s.mu.Unlock() + if s.buf == nil { return "closed" }