fix(gateway): bound fake media shutdown

This commit is contained in:
sechmachine
2026-07-29 22:13:32 +07:00
parent 994d1f00d1
commit 8826f5c804
3 changed files with 73 additions and 7 deletions
+26 -6
View File
@@ -443,20 +443,42 @@ func (s *fakeSession) EmitEvent(event ProviderEvent) {
}
func (s *fakeSession) EmitVideo(payload []byte) {
s.mu.Lock()
defer s.mu.Unlock()
if s.state.State == ProviderStateTerminating || s.state.State == ProviderStateTerminated || s.state.State == ProviderStateDisconnected {
return
}
select {
case s.video <- append([]byte(nil), payload...):
default:
<-s.video
s.video <- append([]byte(nil), payload...)
select {
case <-s.video:
default:
}
select {
case s.video <- append([]byte(nil), payload...):
default:
}
}
}
func (s *fakeSession) EmitAudio(payload []byte) {
s.mu.Lock()
defer s.mu.Unlock()
if s.state.State == ProviderStateTerminating || s.state.State == ProviderStateTerminated || s.state.State == ProviderStateDisconnected {
return
}
select {
case s.audio <- append([]byte(nil), payload...):
default:
<-s.audio
s.audio <- append([]byte(nil), payload...)
select {
case <-s.audio:
default:
}
select {
case s.audio <- append([]byte(nil), payload...):
default:
}
}
}
@@ -542,12 +564,10 @@ func (s *fakeSession) Terminate(ctx context.Context) error {
return nil
}
s.state.State = ProviderStateTerminating
s.mu.Unlock()
s.closeOnce.Do(func() {
close(s.video)
close(s.audio)
})
s.mu.Lock()
s.state.State = ProviderStateTerminated
s.mu.Unlock()
return nil