-
Max Kellermann authored
Works around a problem where MPD goes into a busy loop because snd_pcm_drain() always returns `-EAGAIN` without making any progress (fixes #425). This problem was triggered by snd_pcm_drain() after snd_pcm_cancel() and snd_pcm_prepare(), but without submitting any data with snd_pcm_writei(). I believe this is a kernel bug: in non-blocking mode, the kernel's snd_pcm_drain() function returns early. In this mode, it only checks whether snd_pcm_drain_done() has been called already, but snd_pcm_drain_done() is never called if no data was submitted. In blocking mode, the following `for` loop detects this condition, so snd_pcm_drain_done() is not necessary, but without this extra check, we get `-EAGAIN` forever.
4cdcaa86
Name |
Last commit
|
Last update |
---|---|---|
android | ||
build | ||
doc | ||
python/build | ||
scripts | ||
src | ||
systemd | ||
test | ||
win32 | ||
.gitignore | ||
.travis.yml | ||
AUTHORS | ||
COPYING | ||
NEWS | ||
README.md | ||
meson.build | ||
meson_options.txt | ||
mpd.svg | ||
valgrind.suppressions |