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
|
return
|
||||||
}
|
}
|
||||||
e.detached = true
|
e.detached = true
|
||||||
|
for user, stream := range e.streams {
|
||||||
|
close(stream)
|
||||||
|
delete(e.streams, user)
|
||||||
|
}
|
||||||
if e.prev == nil {
|
if e.prev == nil {
|
||||||
e.parent.head = e.next
|
e.parent.head = e.next
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -28,8 +28,13 @@ func TestListenerDetachIsIdempotentAndConcurrent(t *testing.T) {
|
|||||||
func TestAudioListenerDetachIsIdempotent(t *testing.T) {
|
func TestAudioListenerDetachIsIdempotent(t *testing.T) {
|
||||||
var listeners AudioListeners
|
var listeners AudioListeners
|
||||||
item := listeners.Attach(nil)
|
item := listeners.Attach(nil)
|
||||||
|
stream := make(chan *AudioPacket)
|
||||||
|
item.(*audioEventItem).streams[&User{}] = stream
|
||||||
item.Detach()
|
item.Detach()
|
||||||
item.Detach()
|
item.Detach()
|
||||||
|
if _, open := <-stream; open {
|
||||||
|
t.Fatal("detached audio listener stream remained open")
|
||||||
|
}
|
||||||
listeners.mu.Lock()
|
listeners.mu.Lock()
|
||||||
defer listeners.mu.Unlock()
|
defer listeners.mu.Unlock()
|
||||||
if listeners.head != nil || listeners.tail != nil {
|
if listeners.head != nil || listeners.tail != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user