-
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 |