[vlc-devel] Another HLS question: vlc_object_alive vs. Close
cs448 at cam.ac.uk
Mon Jun 4 22:48:16 CEST 2012
I just fixed an interesting bug in the HTTP live streaming module: when
being used via (at least) the QT GUI, it seemed we could rely on getting
a synchronous kill when the media finished, meaning that by the time
Close methods were called vlc_object_alive(...) would return false.
However when using the same thing via (at least) the vlcj bindings for
libvlc, it wasn't practical to synchronously call vlc_object_kill from
within the event handler for media ending because by the time my code
gets the event it has already been marshalled across a thread boundary
and we've likely returned from the event handler routine.
The upshot of all of this is that httplive.c::Close can get called when
vlc_object_alive(...) still returns true, and in that situation we
vlc_join waiting for a thread that will not die.
My fix was simply to add an extra b_closed flag and replace all
vlc_object_alive with (!b_closed) && vlc_object_alive, but is that
right? What are the rules for Close vs. the state of vlc_object_alive?
Is it a bug in the bindings not to respond to an EOF with an immediate
kill, or should modules be able to deal with that situation?
More information about the vlc-devel