]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Fix 32/64bit problem with multi plugin
authorTakashi Iwai <tiwai@suse.de>
Thu, 6 Apr 2006 16:55:59 +0000 (18:55 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 6 Apr 2006 16:55:59 +0000 (18:55 +0200)
Fix the problems of multi plugin with 32bit apps on 64bit kernel.
The forward/backward of hw plugin are fixed, too.

src/pcm/pcm_hw.c
src/pcm/pcm_multi.c

index 683ae2d1cc13b4b36be09906d200eabbe6ed688c..59e68dfddac5b6ead304b95b607cd4db72b8931c 100644 (file)
@@ -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;
index 22bfd9a43e0ddf924abe7fd98bd69f40a16dad29..85403c6db06e256d8ae4b3e6be7318a2cb510550 100644 (file)
@@ -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;