From: Takashi Iwai Date: Fri, 8 Mar 2002 14:29:09 +0000 (+0000) Subject: fixed segfault in rate conversions. X-Git-Tag: v1.0.3~464 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=9fc594f47b007e2b3db07df2041186eda92e204c;p=alsa-lib.git fixed segfault in rate conversions. --- diff --git a/src/pcm/pcm_plugin.c b/src/pcm/pcm_plugin.c index e1d53f8c..0cb60a72 100644 --- a/src/pcm/pcm_plugin.c +++ b/src/pcm/pcm_plugin.c @@ -334,12 +334,19 @@ static snd_pcm_sframes_t snd_pcm_plugin_write_areas(snd_pcm_t *pcm, snd_atomic_write_begin(&plugin->watom); snd_pcm_mmap_appl_forward(pcm, frames); result = snd_pcm_mmap_commit(slave, slave_offset, slave_frames); + if (result > 0 && (snd_pcm_uframes_t)result != slave_frames) { + snd_pcm_sframes_t res; + res = plugin->undo_write(pcm, slave_areas, slave_offset + result, slave_frames, slave_frames - result); + if (res < 0) + return xfer > 0 ? xfer : res; + frames -= res; + } snd_atomic_write_end(&plugin->watom); if (result <= 0) return xfer > 0 ? xfer : result; - offset += result; - xfer += result; - size -= result; + offset += frames; + xfer += frames; + size -= frames; } return xfer; } @@ -369,12 +376,20 @@ static snd_pcm_sframes_t snd_pcm_plugin_read_areas(snd_pcm_t *pcm, snd_atomic_write_begin(&plugin->watom); snd_pcm_mmap_appl_forward(pcm, frames); result = snd_pcm_mmap_commit(slave, slave_offset, slave_frames); + if (result > 0 && (snd_pcm_uframes_t)result != slave_frames) { + snd_pcm_sframes_t res; + + res = plugin->undo_read(slave, areas, offset, frames, slave_frames - result); + if (res < 0) + return xfer > 0 ? xfer : res; + frames -= res; + } snd_atomic_write_end(&plugin->watom); if (result <= 0) return xfer > 0 ? xfer : result; - offset += result; - xfer += result; - size -= result; + offset += frames; + xfer += frames; + size -= frames; } return xfer; }