Close audio streams when listeners detach
This commit is contained in:
committed by
Brandon McGinty
parent
2eed3c809f
commit
42861dfcd5
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user