[vlc-devel] [PATCH] HLS: don't signal dl thread out of the blue in Close()
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Mon Jun 25 19:29:45 CEST 2012
On Mon, Jun 25, 2012 at 8:19 PM, Frederic YHUEL <fyhuel at viotech.net> wrote:
> On Mon, Jun 25, 2012 at 7:08 PM, Hugo Beauzée-Luyssen <hugo at beauzee.fr> wrote:
>> On Mon, Jun 25, 2012 at 8:00 PM, Laurent Aimar <fenrir at elivagar.org> wrote:
>>> On Mon, Jun 25, 2012 at 07:59:04PM +0300, Hugo Beauzée-Luyssen wrote:
>>>> On Mon, Jun 25, 2012 at 10:48 AM, Frederic YHUEL <fyhuel at viotech.net> wrote:
>>>> > On Tue, Jun 19, 2012 at 4:17 PM, Frédéric Yhuel <fyhuel at viotech.net> wrote:
>>>> >> ---
>>>> >> modules/stream_filter/httplive.c | 5 ++++-
>>>> >> 1 file changed, 4 insertions(+), 1 deletion(-)
>>>> >>
>>>> >> diff --git a/modules/stream_filter/httplive.c b/modules/stream_filter/httplive.c
>>>> >> index 5b15bab..5758189 100644
>>>> >> --- a/modules/stream_filter/httplive.c
>>>> >> +++ b/modules/stream_filter/httplive.c
>>>> >> @@ -2000,8 +2000,11 @@ static void Close(vlc_object_t *p_this)
>>>> >>
>>>> >> /* */
>>>> >> vlc_mutex_lock(&p_sys->download.lock_wait);
>>>> >> - vlc_cond_signal(&p_sys->download.wait);
>>>> >> + /* negate the condition variable's predicate */
>>>> >> + p_sys->download.segment = p_sys->playback.segment = 0;
>>>> >> + p_sys->download.seek = 0; /* better safe than sorry */
>>>> >> vlc_mutex_unlock(&p_sys->download.lock_wait);
>>>> >> + vlc_cond_signal(&p_sys->download.wait);
>>> I am not sure that a vlc_cond_signal outside the lock is valid.
>>>
>>
>> Indeed, missed that :/
>> As far as I know it is "valid", but a bad idea. Will fix the patch locally.
>>
>
> Michael Kerrisk writes in "The Linux Programming Interface" that both
> are valid, according to SUSv3.
>
It depends how many threads are using the wait condition I guess. I
think there are only two in the current case but it's been kind of a
long time I didn't read the code again, so I feel more confident in
keeping the mutex locked before signaling.
> It seems like Butenhof points out that, on some implementations,
> unlocking the mutex and then signaling the condition variable yields
> to better performance. I don't know if is really true though :-)
>
That would be logical, assuming the thread is resumed immediately it
has to wait for the lock to be released.
> The important thing is to change the predicate while the mutex is acquired.
>
>
> Best regards
> Frédéric
--
Hugo Beauzée-Luyssen
mail: hugo at beauzee.fr
skype: beauze.h
More information about the vlc-devel
mailing list