]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: fix the fast_ops pcm argument for fast_ops
authorJaroslav Kysela <perex@perex.cz>
Mon, 14 Nov 2022 13:34:46 +0000 (14:34 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 14 Nov 2022 13:39:26 +0000 (14:39 +0100)
The fast_ops callback invocation must always pass the fast_op_arg
as the pcm argument. Plugins expect that.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/pcm/pcm.c
src/pcm/pcm_direct.c
src/pcm/pcm_hw.c
src/pcm/pcm_multi.c

index 927aa055d30eac145b49427a120fe218a0735baf..2b966d446e4b3d60f4bfc2b27d6c5119473554eb 100644 (file)
@@ -1705,7 +1705,7 @@ int snd_pcm_link(snd_pcm_t *pcm1, snd_pcm_t *pcm2)
        assert(pcm1);
        assert(pcm2);
        if (pcm1->fast_ops->link)
-               err = pcm1->fast_ops->link(pcm1, pcm2);
+               err = pcm1->fast_ops->link(pcm1->fast_op_arg, pcm2);
        else
                err = -ENOSYS;
        return err;
@@ -1722,7 +1722,7 @@ int snd_pcm_unlink(snd_pcm_t *pcm)
 
        assert(pcm);
        if (pcm->fast_ops->unlink)
-               err = pcm->fast_ops->unlink(pcm);
+               err = pcm->fast_ops->unlink(pcm->fast_op_arg);
        else
                err = -ENOSYS;
        return err;
index 4803b81b4ee8e61e0b5770cc93966cdc8fed486e..3cc5305f85795f9c3aa41a75a1659e877ad71985 100644 (file)
@@ -688,7 +688,7 @@ int snd_pcm_direct_check_xrun(snd_pcm_direct_t *direct, snd_pcm_t *pcm)
                 * so don't increment but just update to actual counter
                 */
                direct->recoveries = direct->shmptr->s.recoveries;
-               pcm->fast_ops->drop(pcm);
+               pcm->fast_ops->drop(pcm->fast_op_arg);
                /* trigger_tstamp update is missing in drop callbacks */
                gettimestamp(&direct->trigger_tstamp, pcm->tstamp_type);
                /* no timer clear:
index 5dfe32ee91e8b1bf6fff3f150f6ed6303eef3270..0588ce5e7401b00519757f1f8c014190831520a8 100644 (file)
@@ -838,7 +838,7 @@ static int snd_pcm_hw_link(snd_pcm_t *pcm1, snd_pcm_t *pcm2)
 {
        if (pcm2->type != SND_PCM_TYPE_HW) {
                if (pcm2->fast_ops->link_slaves)
-                       return pcm2->fast_ops->link_slaves(pcm2, pcm1);
+                       return pcm2->fast_ops->link_slaves(pcm2->fast_op_arg, pcm1);
                return -ENOSYS;
        }
        return hw_link(pcm1, pcm2);
index bec6d06fa4db535137d6dae348838079dcc91ea5..3e7ce82c7fcdab1fe939a672cbea7de278fc92db 100644 (file)
@@ -759,8 +759,9 @@ static int snd_pcm_multi_link_slaves(snd_pcm_t *pcm, snd_pcm_t *master)
 static int snd_pcm_multi_link(snd_pcm_t *pcm1, snd_pcm_t *pcm2)
 {
        snd_pcm_multi_t *multi = pcm1->private_data;
-       if (multi->slaves[0].pcm->fast_ops->link)
-               return multi->slaves[0].pcm->fast_ops->link(multi->slaves[0].pcm, pcm2);
+       snd_pcm_t *main_pcm = multi->slaves[0].pcm;
+       if (main_pcm->fast_ops->link)
+               return main_pcm->fast_ops->link(main_pcm->fast_op_arg, pcm2);
        return -ENOSYS;
 }