From: Takashi Iwai Date: Thu, 6 Apr 2006 16:55:59 +0000 (+0200) Subject: Fix 32/64bit problem with multi plugin X-Git-Tag: v1.0.11rc5~7 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=a2ee8e20e8f86021151f67aa80178799626bda24;p=alsa-lib.git Fix 32/64bit problem with multi plugin Fix the problems of multi plugin with 32bit apps on 64bit kernel. The forward/backward of hw plugin are fixed, too. --- diff --git a/src/pcm/pcm_hw.c b/src/pcm/pcm_hw.c index 683ae2d1..59e68dfd 100644 --- a/src/pcm/pcm_hw.c +++ b/src/pcm/pcm_hw.c @@ -624,6 +624,9 @@ static snd_pcm_sframes_t snd_pcm_hw_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t fra SYSMSG("SNDRV_PCM_IOCTL_REWIND failed"); return err; } + err = sync_ptr(hw, SNDRV_PCM_SYNC_PTR_APPL); + if (err < 0) + return err; return frames; } @@ -637,6 +640,9 @@ static snd_pcm_sframes_t snd_pcm_hw_forward(snd_pcm_t *pcm, snd_pcm_uframes_t fr SYSMSG("SNDRV_PCM_IOCTL_FORWARD failed"); return err; } + err = sync_ptr(hw, SNDRV_PCM_SYNC_PTR_APPL); + if (err < 0) + return err; return frames; } else { snd_pcm_sframes_t avail; diff --git a/src/pcm/pcm_multi.c b/src/pcm/pcm_multi.c index 22bfd9a4..85403c6d 100644 --- a/src/pcm/pcm_multi.c +++ b/src/pcm/pcm_multi.c @@ -424,8 +424,9 @@ static int snd_pcm_multi_prepare(snd_pcm_t *pcm) int err = 0; unsigned int i; for (i = 0; i < multi->slaves_count; ++i) { - if (multi->slaves[i].linked) - continue; + /* We call prepare to each slave even if it's linked. + * This is to make sure to sync non-mmaped control/status. + */ err = snd_pcm_prepare(multi->slaves[i].pcm); if (err < 0) return err; @@ -439,8 +440,7 @@ static int snd_pcm_multi_reset(snd_pcm_t *pcm) int err = 0; unsigned int i; for (i = 0; i < multi->slaves_count; ++i) { - if (multi->slaves[i].linked) - continue; + /* Reset each slave, as well as in prepare */ err = snd_pcm_reset(multi->slaves[i].pcm); if (err < 0) return err;