[alsa-devel] [PATCH - JACK PCM plugin] jack: Write only valid values to the internal hw_ptr

Jaroslav Kysela perex at perex.cz
Thu Feb 8 11:54:13 CET 2018


Dne 8.2.2018 v 09:49 Wischer, Timo (ADITG/ESB) napsal(a):
> Hello all,
> 
> any comments so far?

The patch looks good. Applied. Thanks.

				Jaroslav

> 
> It would be great if someone could have a look
> because I have some further fixes pending.
> 
> Best regards
> 
> Timo Wischer
> 
> Advanced Driver Information Technology GmbH
> Engineering Software Base (ADITG/ESB)
> Robert-Bosch-Str. 200
> 31139 Hildesheim
> Germany
> 
> Tel. +49 5121 49 6938
> Fax +49 5121 49 6999
> twischer at de.adit-jv.com
> 
> ADIT is a joint venture company of Robert Bosch GmbH/Robert Bosch Car Multimedia GmbH and DENSO Corporation
> Sitz: Hildesheim, Registergericht: Amtsgericht Hildesheim HRB 3438
> Geschäftsführung: Wilhelm Grabow, Ken Yaguchi
> 
> ________________________________________
> From: Wischer, Timo (ADITG/ESB)
> Sent: Monday, January 22, 2018 9:37 AM
> To: patch at alsa-project.org
> Cc: alsa-devel at alsa-project.org; Wischer, Timo (ADITG/ESB)
> Subject: [PATCH - JACK PCM plugin] jack: Write only valid values to the internal hw_ptr
> 
> From: Timo Wischer <twischer at de.adit-jv.com>
> 
> Otherwise the ALSA thread could for example read a hw_ptr >
> buffer_size
> 
> Signed-off-by: Timo Wischer <twischer at de.adit-jv.com>
> 
> diff --git a/jack/pcm_jack.c b/jack/pcm_jack.c
> index 4468ede..3aed332 100644
> --- a/jack/pcm_jack.c
> +++ b/jack/pcm_jack.c
> @@ -137,6 +137,7 @@ static int
>  snd_pcm_jack_process_cb(jack_nframes_t nframes, snd_pcm_ioplug_t *io)
>  {
>         snd_pcm_jack_t *jack = io->private_data;
> +       snd_pcm_uframes_t hw_ptr;
>         const snd_pcm_channel_area_t *areas;
>         snd_pcm_uframes_t xfer = 0;
>         unsigned int channel;
> @@ -155,12 +156,13 @@ snd_pcm_jack_process_cb(jack_nframes_t nframes, snd_pcm_ioplug_t *io)
>                         return 0;
>                 }
>         }
> -
> +
> +       hw_ptr = jack->hw_ptr;
>         areas = snd_pcm_ioplug_mmap_areas(io);
> 
>         while (xfer < nframes) {
>                 snd_pcm_uframes_t frames = nframes - xfer;
> -               snd_pcm_uframes_t offset = jack->hw_ptr;
> +               snd_pcm_uframes_t offset = hw_ptr;
>                 snd_pcm_uframes_t cont = io->buffer_size - offset;
> 
>                 if (cont < frames)
> @@ -173,10 +175,11 @@ snd_pcm_jack_process_cb(jack_nframes_t nframes, snd_pcm_ioplug_t *io)
>                                 snd_pcm_area_copy(&areas[channel], offset, &jack->areas[channel], xfer, frames, io->format);
>                 }
> 
> -               jack->hw_ptr += frames;
> -               jack->hw_ptr %= io->buffer_size;
> +               hw_ptr += frames;
> +               hw_ptr %= io->buffer_size;
>                 xfer += frames;
>         }
> +       jack->hw_ptr = hw_ptr;
> 
>         pcm_poll_unblock_check(io); /* unblock socket for polling if needed */
> 
> --
> 2.7.4
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 


-- 
Jaroslav Kysela <perex at perex.cz>
Linux Sound Maintainer; ALSA Project; Red Hat, Inc.


More information about the Alsa-devel mailing list