diff --git a/pkg/mixer/mixer.go b/pkg/mixer/mixer.go index 7d6ac47..e4dfa1c 100644 --- a/pkg/mixer/mixer.go +++ b/pkg/mixer/mixer.go @@ -157,12 +157,20 @@ func (m *Mixer) start() { } func (m *Mixer) Stop() { + m.mu.Lock() + defer m.mu.Unlock() m.stopped.Break() } func (m *Mixer) NewInput() *Input { + if m == nil { + return nil + } m.mu.Lock() defer m.mu.Unlock() + if m.stopped.IsBroken() { + return nil + } inp := &Input{ m: m, @@ -222,6 +230,9 @@ func (i *Input) SampleRate() int { } func (i *Input) Close() error { + if i == nil { + return nil + } i.m.RemoveInput(i) return nil } diff --git a/pkg/sip/inbound.go b/pkg/sip/inbound.go index 3926bb2..27dc180 100644 --- a/pkg/sip/inbound.go +++ b/pkg/sip/inbound.go @@ -838,6 +838,9 @@ func (c *inboundCall) joinRoom(ctx context.Context, rconf RoomConfig, status Cal func (c *inboundCall) playAudio(ctx context.Context, frames []media.PCM16Sample) { t := c.lkRoom.NewTrack() + if t == nil { + return // closed + } defer t.Close() sampleRate := res.SampleRate diff --git a/pkg/sip/room.go b/pkg/sip/room.go index 32103cc..749552c 100644 --- a/pkg/sip/room.go +++ b/pkg/sip/room.go @@ -189,6 +189,9 @@ func (r *Room) Connect(conf *config.Config, rconf RoomConfig) error { go func() { mTrack := r.NewTrack() + if mTrack == nil { + return // closed + } defer mTrack.Close() odec, err := opus.Decode(mTrack, channels, log) @@ -352,7 +355,6 @@ func (r *Room) CloseWithReason(reason livekit.DisconnectReason) error { } if r.mix != nil { r.mix.Stop() - r.mix = nil } return err } @@ -391,5 +393,8 @@ func (r *Room) SendData(data lksdk.DataPacket, opts ...lksdk.DataPublishOption) } func (r *Room) NewTrack() *mixer.Input { + if r == nil { + return nil + } return r.mix.NewInput() }