The idea of the series is to fix the two issues that I found [1] for the hw plugin. snd_pcm_rewindable() sometimes returned negative values that are actually negative amounts of samples and not error codes. Also, it bases its calculations on stale hardware position pointer, which is not what PulseAudio wants (alternatively, we can document the need to call snd_pcm_avail() before snd_pcm_rewindable(), but I don't like it).
Also, similar issues in other plugins are fixed, except for "share" and "shm" plugins that I could not really test due to unrelated crashes. I also fixed miscelanneous cosmetic issues and bugs that I found along the way.
Note: this series touches pcm_dmix.c, but does not make it rewindable. In other words, a variant of the test in [2] now produces a tone instead of failing due to snd_pcm_rewind() returning 0. But it should ideally produce silence. Obviously, there is some bug left that I have not pinpointed yet.
Same for dshare: the test produces a tone, and I don't yet know why.
[1] http://permalink.gmane.org/gmane.linux.alsa.devel/122843 and http://permalink.gmane.org/gmane.linux.alsa.devel/122848 (modify the test program to set the stop threshold larger than the buffer size) [2] http://permalink.gmane.org/gmane.linux.alsa.devel/122179
Alexander E. Patrakov (9): dmix: actually rewind when running or being drained pcm: express the rewind size limitation logic better pcm: handle negative values from snd_pcm_mmap_hw_avail pcm, rate: use the snd_pcm_mmap_hw_avail function pcm, null: use the snd_pcm_mmap_avail function rate: handle negative values from snd_pcm_mmap_playback_hw_avail dsnoop: rewindable and forwardable logic was swapped pcm: rewindable, forwardable: don't return stale data pcm, file: don't recurse in the rewindable and forwardable callbacks
src/pcm/pcm_dmix.c | 20 ++++++++++++++------ src/pcm/pcm_dshare.c | 16 +++++++++------- src/pcm/pcm_dsnoop.c | 18 ++++++++++-------- src/pcm/pcm_file.c | 4 ++-- src/pcm/pcm_hw.c | 8 +++++++- src/pcm/pcm_ioplug.c | 4 +++- src/pcm/pcm_local.h | 18 ++++++++++++++++++ src/pcm/pcm_null.c | 5 +---- src/pcm/pcm_plugin.c | 12 +++++++++--- src/pcm/pcm_rate.c | 9 +++------ 10 files changed, 76 insertions(+), 38 deletions(-)