[vlc-devel] [RFC PATCH 0/3] decoder: mutexes and conds cleanup

Thomas Guillem thomas at gllm.fr
Wed Apr 1 19:02:16 CEST 2015



On Wed, Apr 1, 2015, at 17:41, Rémi Denis-Courmont wrote:
> Le mercredi 01 avril 2015, 16:13:15 Thomas Guillem a écrit :
> > I have been trying to fix a race when the input wait for the decoder that
> > has not decoded any data yet and won't decode anything. See mail "[PATCH]
> > decoder: fix race".
> > 
> > My biggest issue was that the function input_DecoderWait waited for 2
> > different variables protected by 2 different mutexes and signaled by 2
> > different cond. So I decided to minimize the number of mutexes and conds.
> 
> Your "biggest issue" does not exist... input_DecoderWait() only waits on 
> wait_acknowledge (#L2140).
> 
> > Now, in decoder.c, the input Fifo and the DecoderThread share the same mutex
> > and the same cond.
> 
> It should be possible to merge wait_acknowledge and wait_fifo, while
> moving the 
> corresponding state from the owner lock to the FIFO lock. But I don't
> think 
> that suppressing the owner lock completely is a good idea. And in any
> case, we 
> need at the very least two condition variables (one in each direction),
> from 
> the four that currently exist.

I always wondered if I should use one condition variable per direction,
I don't always do it. I think it's better for code clarity, but I don't
see any others advantages. Anyway, I agree, I'll try to do that in the
future.

I have a patch that merge the four conditions into two. But It shouldn't
be applied until some aout_* functions are called inside the owner lock.

> 
> > I had to move some long function call (the ones calling
> > aout/vout) outside the lock in order to don't block or wait too long while
> > the mutex is locked.
> 
> The main point of my most recent changes were to move aout_DecPlay() out
> of 
> the (owner) lock. But to do that, I have to remove all accesses to p_aout 
> outside the lock. And to do that, I have to remove all accesses to p_aout
> from 
> outside the decoder thread. I think I managed to remove
> aout_DecIsEmpty(), but 
> I still have some challenges with aout_DecChangePause().
> 
> tl;dr: you cannot do that so easily.

Thank you for your comments and your clarifications.

> 
> -- 
> Rémi Denis-Courmont
> http://www.remlab.net/
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel



More information about the vlc-devel mailing list