[vlc-devel] [PATCH] picture_pool: fix refcount leak if pic_lock fails.

Rémi Denis-Courmont remi at remlab.net
Fri Oct 31 17:11:30 CET 2014


Le vendredi 31 octobre 2014, 16:30:51 Thomas Guillem a écrit :
> ---
>  src/misc/picture_pool.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/src/misc/picture_pool.c b/src/misc/picture_pool.c
> index 2a0f677..771df99 100644
> --- a/src/misc/picture_pool.c
> +++ b/src/misc/picture_pool.c
> @@ -277,8 +277,11 @@ picture_t *picture_pool_Get(picture_pool_t *pool)
>          if (!atomic_compare_exchange_strong(&picture->gc.refcount, &refs,
> 1)) continue;
> 
> -        if (pool->pic_lock != NULL && pool->pic_lock(picture) != 0)
> +        if (pool->pic_lock != NULL && pool->pic_lock(picture) != 0) {
> +            refs = 1;
> +            atomic_compare_exchange_strong(&picture->gc.refcount, &refs,
> 0);

This does not make much sense to me.
What happens if the function returns false?

>> continue;
> +        }
> 
>          /* */
>          picture->p_next = NULL;

-- 
Rémi Denis-Courmont
http://www.remlab.net/




More information about the vlc-devel mailing list