diff --git a/gumble/gumbleopenal/stream.go b/gumble/gumbleopenal/stream.go index 24cfbcd..1d8c196 100644 --- a/gumble/gumbleopenal/stream.go +++ b/gumble/gumbleopenal/stream.go @@ -487,8 +487,16 @@ func (s *Stream) OnAudioStream(e *gumble.AudioStreamEvent) { } reclaim() s.render(func() { - emptyBufs.Delete() + // OpenAL does not delete buffers when a source is deleted. Reclaim + // queued buffers after stopping so every generated buffer is freed. + source.Stop() + if n := source.BuffersQueued(); n > 0 { + queuedBufs := make(openal.Buffers, n) + source.UnqueueBuffers(queuedBufs) + emptyBufs = append(emptyBufs, queuedBufs...) + } source.Delete() + emptyBufs.Delete() e.User.SetAudioSource(nil) }) log.Debug("audio stream ended for user %s", e.User.Name)