Close audio streams when listeners detach

This commit is contained in:
Brandon McGinty (chatgpt)
2026-08-10 04:01:42 -04:00
committed by Brandon McGinty
parent 2eed3c809f
commit 42861dfcd5
2 changed files with 9 additions and 0 deletions
+4
View File
@@ -17,6 +17,10 @@ func (e *audioEventItem) Detach() {
return
}
e.detached = true
for user, stream := range e.streams {
close(stream)
delete(e.streams, user)
}
if e.prev == nil {
e.parent.head = e.next
} else {
@@ -28,8 +28,13 @@ func TestListenerDetachIsIdempotentAndConcurrent(t *testing.T) {
func TestAudioListenerDetachIsIdempotent(t *testing.T) {
var listeners AudioListeners
item := listeners.Attach(nil)
stream := make(chan *AudioPacket)
item.(*audioEventItem).streams[&User{}] = stream
item.Detach()
item.Detach()
if _, open := <-stream; open {
t.Fatal("detached audio listener stream remained open")
}
listeners.mu.Lock()
defer listeners.mu.Unlock()
if listeners.head != nil || listeners.tail != nil {