[vlc-devel] Deadlock on stop
Romain Vimont | ®om
rom at rom1v.com
Fri May 9 18:02:09 CEST 2014
Just to link it to the original discussion, I propose a patch here:
https://mailman.videolan.org/pipermail/vlc-devel/2014-May/098007.html
Le mercredi 30 avril 2014 à 17:11 +0200, Romain Vimont | ®om a écrit :
> Absolutely, so the problem is that the input thread does not finish.
>
> After some investigations, I discovered that this is due to race
> conditions after calls to vlc_object_alive(). Moreover, this function
> has an explicit comment (src/misc/objects.c):
>
> /**
> * This function returns true, except when it returns false.
> * \warning Do not use this function. Ever. You were warned.
> */
> bool vlc_object_alive(vlc_object_t *obj)
>
> The deadlock does not happen always at the same place, but always after
> a call to vlc_object_alive().
>
> For instance, in AStreamPrebufferBlock() (src/input/stream.c), the call
> to AReadBlock() sometimes never ends, when vlc_object_alive() returns 1
> and the "stopping thread" is calling ObjectKillChildrens(), so there is
> no input data anymore (so AReadBlock() waits forever).
>
> Although, this ObjectKillChildrens() have a reassuring comment too:
> /* FIXME ObjectKillChildrens seems a very bad idea in fact */
>
> Another example, the deadlock may occur during the call to
> p_demux->pf_demux(p_demux) after vlc_object_alive() in Open() of
> modules/demux/ts.c.
>
> I think we need more than an atomic flag (currently "alive" in "struct
> vlc_object_internals"): we need to be able to interrupt AReadBlock() on
> stop (and other blocking functions which are currently called after a
> test to vlc_object_alive()).
>
> What do you think?
>
> Le vendredi 25 avril 2014 à 19:11 +0300, Rémi Denis-Courmont a écrit :
> > Le vendredi 25 avril 2014, 15:13:22 Romain Vimont | ®om a écrit :
> > > I guess there should be a call to vlc_sem_post() somewhere to wake it
> > > up… Maybe you have an idea?
> >
> > It's in finish_joinable_thread().
> >
> > --
> > 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