[pulseaudio-discuss] [PATCH] memblock: Fix more block ID collisions

Alexander E. Patrakov patrakov at gmail.com
Thu Jan 8 04:43:09 PST 2015


08.01.2015 17:14, David Henningsson wrote:
> Since the srb memblock and the audio data were coming from separate
> pools, and the base index was per pool, they could actually still
> collide.
>
> This patch changes the base index to be global and atomically
> incremented.
>
> Reported-by: Arun Raghavan <arun at accosted.net>
> Signed-off-by: David Henningsson <david.henningsson at canonical.com>

I confirm that the patch fixes the "junk in the recorded stream" bug. 
Looks good.

> ---
>   src/pulsecore/memblock.c | 6 +++---
>   1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/src/pulsecore/memblock.c b/src/pulsecore/memblock.c
> index b781312..d071a5f 100644
> --- a/src/pulsecore/memblock.c
> +++ b/src/pulsecore/memblock.c
> @@ -151,7 +151,6 @@ struct pa_mempool {
>       size_t block_size;
>       unsigned n_blocks;
>       bool is_remote_writable;
> -    unsigned export_baseidx;
>
>       pa_atomic_t n_init;
>
> @@ -1088,6 +1087,8 @@ finish:
>   pa_memexport* pa_memexport_new(pa_mempool *p, pa_memexport_revoke_cb_t cb, void *userdata) {
>       pa_memexport *e;
>
> +    static pa_atomic_t export_baseidx = PA_ATOMIC_INIT(0);
> +
>       pa_assert(p);
>       pa_assert(cb);
>
> @@ -1106,8 +1107,7 @@ pa_memexport* pa_memexport_new(pa_mempool *p, pa_memexport_revoke_cb_t cb, void
>       pa_mutex_lock(p->mutex);
>
>       PA_LLIST_PREPEND(pa_memexport, p->exports, e);
> -    e->baseidx = p->export_baseidx;
> -    p->export_baseidx += PA_MEMEXPORT_SLOTS_MAX;
> +    e->baseidx = (uint32_t) pa_atomic_add(&export_baseidx, PA_MEMEXPORT_SLOTS_MAX);
>
>       pa_mutex_unlock(p->mutex);
>       return e;
>

-- 
Alexander E. Patrakov


More information about the pulseaudio-discuss mailing list