Adaptive module hangs at invalid HLS playlist
Opening a playlist that looks like HLS but is not actually a HLS playlist but instead references classic HTTP live streams, like the following playlist:
http://www.play.cz/radio/radio1-192.mp3.m3u
#EXTM3U
#EXT-X-VERSION:3
http://icecast2.play.cz/radio1-192.mp3
http://icecast6.play.cz/radio1-128.mp3
http://icecast2.play.cz/radio1-64.mp3
#EXT-X-ENDLIST
causes the adaptive module to log an error adaptive demux error: Failed to create demuxer 0x0 Unknown
,
but does not properly fail, instead gets stuck forever in the downloaderThread:
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
* frame #0: 0x00007fff6ba7f55e libsystem_kernel.dylib`__ulock_wait + 10
frame #1: 0x00007fff6bb425c2 libsystem_pthread.dylib`_pthread_join + 347
frame #2: 0x000000010024e0ad libvlccore.dylib`vlc_join(th=vlc_thread_t @ 0x00007ffeefbff578, result=0x0000000000000000) at thread.c:196:15
frame #3: 0x00000001001d1855 libvlccore.dylib`vlc_player_Delete(player=0x000000010054d570) at player.c:1892:5
frame #4: 0x0000000100188304 libvlccore.dylib`vlc_playlist_PlayerDestroy(playlist=0x000000010054d4d0) at player.c:164:5
frame #5: 0x00000001001889ef libvlccore.dylib`vlc_playlist_Delete(playlist=0x000000010054d4d0) at playlist.c:73:5
frame #6: 0x000000010014f55f libvlccore.dylib`libvlc_InternalCleanup(p_libvlc=0x0000000100605550) at libvlc.c:377:9
frame #7: 0x0000000100115f13 libvlc.dylib`libvlc_release(p_instance=0x00000001006054f0) at core.c:85:9
frame #8: 0x00000001000036b1 vlc-osx-static`main(i_argc=1, ppsz_argv=0x00007ffeefbff7e0) at darwinvlc.m:303:5
frame #9: 0x00007fff6b93ccc9 libdyld.dylib`start + 1
frame #10: 0x00007fff6b93ccc9 libdyld.dylib`start + 1
thread #2
frame #0: 0x00007fff6ba7f4ce libsystem_kernel.dylib`__workq_kernreturn + 10
frame #1: 0x00007fff6bb3daa1 libsystem_pthread.dylib`_pthread_wqthread + 390
frame #2: 0x00007fff6bb3cb77 libsystem_pthread.dylib`start_wqthread + 15
thread #9, name = 'AMCP Logging Spool'
frame #0: 0x00007fff6ba7de36 libsystem_kernel.dylib`semaphore_wait_trap + 10
frame #1: 0x00007fff65510b16 caulk`caulk::mach::semaphore::wait() + 16
frame #2: 0x00007fff655109b2 caulk`caulk::semaphore::timed_wait(double) + 106
frame #3: 0x00007fff655107c4 caulk`caulk::concurrent::details::worker_thread::run() + 30
frame #4: 0x00007fff655101e4 caulk`void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*> > >(void*) + 45
frame #5: 0x00007fff6bb41109 libsystem_pthread.dylib`_pthread_start + 148
frame #6: 0x00007fff6bb3cb8b libsystem_pthread.dylib`thread_start + 15
thread #10
frame #0: 0x00007fff6ba7de36 libsystem_kernel.dylib`semaphore_wait_trap + 10
frame #1: 0x00007fff65510b16 caulk`caulk::mach::semaphore::wait() + 16
frame #2: 0x00007fff655109b2 caulk`caulk::semaphore::timed_wait(double) + 106
frame #3: 0x00007fff655107c4 caulk`caulk::concurrent::details::worker_thread::run() + 30
frame #4: 0x00007fff655101e4 caulk`void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*> > >(void*) + 45
frame #5: 0x00007fff6bb41109 libsystem_pthread.dylib`_pthread_start + 148
frame #6: 0x00007fff6bb3cb8b libsystem_pthread.dylib`thread_start + 15
thread #12
frame #0: 0x00007fff6ba80882 libsystem_kernel.dylib`__psynch_cvwait + 10
frame #1: 0x00007fff6bb41425 libsystem_pthread.dylib`_pthread_cond_wait + 698
frame #2: 0x000000010024d78c libvlccore.dylib`vlc_atomic_wait(addr=0x000070000c4c6ae0, value=0) at wait.c:84:9
frame #3: 0x0000000100237433 libvlccore.dylib`vlc_cond_wait(cond=0x000000010054d6a0, mutex=0x000000010054d588) at threads.c:345:5
frame #4: 0x00000001001d2582 libvlccore.dylib`vlc_player_destructor_Thread(data=0x000000010054d570) at player.c:214:13
frame #5: 0x00007fff6bb41109 libsystem_pthread.dylib`_pthread_start + 148
frame #6: 0x00007fff6bb3cb8b libsystem_pthread.dylib`thread_start + 15
thread #16
frame #0: 0x00007fff6ba80882 libsystem_kernel.dylib`__psynch_cvwait + 10
frame #1: 0x00007fff6bb41425 libsystem_pthread.dylib`_pthread_cond_wait + 698
frame #2: 0x000000010024d78c libvlccore.dylib`vlc_atomic_wait(addr=0x000070000c752f60, value=0) at wait.c:84:9
frame #3: 0x0000000100237433 libvlccore.dylib`vlc_cond_wait(cond=0x00000001005e34d8, mutex=0x00000001005e34f0) at threads.c:345:5
frame #4: 0x000000010024d409 libvlccore.dylib`vlc_timer_thread(data=0x00000001005e34d0) at timer.c:64:13
frame #5: 0x00007fff6bb41109 libsystem_pthread.dylib`_pthread_start + 148
frame #6: 0x00007fff6bb3cb8b libsystem_pthread.dylib`thread_start + 15
thread #24, name = 'com.apple.NSEventThread'
frame #0: 0x00007fff6ba7ddfa libsystem_kernel.dylib`mach_msg_trap + 10
frame #1: 0x00007fff6ba7e170 libsystem_kernel.dylib`mach_msg + 60
frame #2: 0x00007fff31885ef5 CoreFoundation`__CFRunLoopServiceMachPort + 247
frame #3: 0x00007fff318849c2 CoreFoundation`__CFRunLoopRun + 1319
frame #4: 0x00007fff31883e3e CoreFoundation`CFRunLoopRunSpecific + 462
frame #5: 0x00007fff2ec97954 AppKit`_NSEventThread + 132
frame #6: 0x00007fff6bb41109 libsystem_pthread.dylib`_pthread_start + 148
frame #7: 0x00007fff6bb3cb8b libsystem_pthread.dylib`thread_start + 15
thread #35
frame #0: 0x00007fff6ba80882 libsystem_kernel.dylib`__psynch_cvwait + 10
frame #1: 0x00007fff6bb41425 libsystem_pthread.dylib`_pthread_cond_wait + 698
frame #2: 0x000000010024d78c libvlccore.dylib`vlc_atomic_wait(addr=0x000070000cae49f0, value=0) at wait.c:84:9
frame #3: 0x0000000100237433 libvlccore.dylib`vlc_cond_wait(cond=0x000000011fe29a60, mutex=0x000000011fe29a38) at threads.c:345:5
frame #4: 0x000000010c3ba54d libadaptive_plugin.dylib`vlc::threads::condition_variable::wait(this=0x000000011fe29a60, mutex=0x000000011fe29a38) at vlc_cxx_helpers.hpp:324:9
frame #5: 0x000000010c3bf18e libadaptive_plugin.dylib`adaptive::http::Downloader::cancel(this=0x000000011fe29a30, source=0x000000011ced08c0) at Downloader.cpp:78:22
frame #6: 0x000000010c3c98ed libadaptive_plugin.dylib`adaptive::http::HTTPConnectionManager::cancel(this=0x000000011fe2acd0, source=0x000000011ced08c0) at HTTPConnectionManager.cpp:166:21
frame #7: 0x000000010c3ba3ff libadaptive_plugin.dylib`adaptive::http::HTTPChunkBufferedSource::~HTTPChunkBufferedSource(this=0x000000011ced08c0) at Chunk.cpp:326:18
frame #8: 0x000000010c3ba5c5 libadaptive_plugin.dylib`adaptive::http::HTTPChunkBufferedSource::~HTTPChunkBufferedSource(this=0x000000011ced08c0) at Chunk.cpp:324:1
frame #9: 0x000000010c3ba5ec libadaptive_plugin.dylib`adaptive::http::HTTPChunkBufferedSource::~HTTPChunkBufferedSource(this=0x000000011ced08c0) at Chunk.cpp:324:1
frame #10: 0x000000010c3b8db3 libadaptive_plugin.dylib`adaptive::http::AbstractChunk::~AbstractChunk(this=0x000000011cecfb10) at Chunk.cpp:82:5
frame #11: 0x000000010c387e39 libadaptive_plugin.dylib`adaptive::playlist::SegmentChunk::~SegmentChunk(this=0x000000011cecfb10) at SegmentChunk.cpp:47:1
frame #12: 0x000000010c387e55 libadaptive_plugin.dylib`adaptive::playlist::SegmentChunk::~SegmentChunk(this=0x000000011cecfb10) at SegmentChunk.cpp:45:1
frame #13: 0x000000010c387e7c libadaptive_plugin.dylib`adaptive::playlist::SegmentChunk::~SegmentChunk(this=0x000000011cecfb10) at SegmentChunk.cpp:45:1
frame #14: 0x000000010c3bb481 libadaptive_plugin.dylib`adaptive::http::ProbeableChunk::~ProbeableChunk(this=0x000000011317e5f0) at Chunk.cpp:544:5
frame #15: 0x000000010c3bb4b5 libadaptive_plugin.dylib`adaptive::http::ProbeableChunk::~ProbeableChunk(this=0x000000011317e5f0) at Chunk.cpp:541:1
frame #16: 0x000000010c3bb4dc libadaptive_plugin.dylib`adaptive::http::ProbeableChunk::~ProbeableChunk(this=0x000000011317e5f0) at Chunk.cpp:541:1
frame #17: 0x000000010c3ee23d libadaptive_plugin.dylib`adaptive::AbstractStream::~AbstractStream(this=0x000000011fe22c50) at Streams.cpp:113:5
frame #18: 0x000000010c454b9a libadaptive_plugin.dylib`hls::HLSStream::~HLSStream(this=0x000000011fe22c50) at HLSStreams.cpp:50:1
frame #19: 0x000000010c454bc5 libadaptive_plugin.dylib`hls::HLSStream::~HLSStream(this=0x000000011fe22c50) at HLSStreams.cpp:47:1
frame #20: 0x000000010c454c4c libadaptive_plugin.dylib`hls::HLSStream::~HLSStream(this=0x000000011fe22c50) at HLSStreams.cpp:47:1
frame #21: 0x000000010c3dd200 libadaptive_plugin.dylib`adaptive::PlaylistManager::unsetPeriod(this=0x000000011fe71a40) at PlaylistManager.cpp:105:9
frame #22: 0x000000010c3dd08c libadaptive_plugin.dylib`adaptive::PlaylistManager::~PlaylistManager(this=0x000000011fe71a40) at PlaylistManager.cpp:94:5
frame #23: 0x000000010c4547b8 libadaptive_plugin.dylib`hls::HLSManager::~HLSManager(this=0x000000011fe71a40) at HLSManager.cpp:49:1
frame #24: 0x000000010c4547d5 libadaptive_plugin.dylib`hls::HLSManager::~HLSManager(this=0x000000011fe71a40) at HLSManager.cpp:48:1
frame #25: 0x000000010c4547fc libadaptive_plugin.dylib`hls::HLSManager::~HLSManager(this=0x000000011fe71a40) at HLSManager.cpp:48:1
frame #26: 0x000000010c363e3b libadaptive_plugin.dylib`Close(p_obj=0x000000011fe21980) at adaptive.cpp:277:5
frame #27: 0x000000010017882c libvlccore.dylib`module_unneed(obj=0x000000011fe21980, module=0x00000001007419c0) at modules.c:304:9
frame #28: 0x00000001001a36f9 libvlccore.dylib`demux_DestroyDemux(demux=0x000000011fe21980) at demux.c:88:5
frame #29: 0x00000001001e51c5 libvlccore.dylib`vlc_stream_Delete(s=0x000000011fe21980) at stream.c:137:5
frame #30: 0x00000001001c4c75 libvlccore.dylib`demux_Delete(demux=0x000000011fe21980) at vlc_demux.h:291:5
frame #31: 0x00000001001c2368 libvlccore.dylib`InputSourceDestroy(in=0x0000000113d25ac0) at input.c:2858:9
frame #32: 0x00000001001c1085 libvlccore.dylib`End(p_input=0x000000010312aa00) at input.c:1398:5
frame #33: 0x00000001001bec69 libvlccore.dylib`Run(data=0x000000010312aa00) at input.c:479:9
frame #34: 0x00007fff6bb41109 libsystem_pthread.dylib`_pthread_start + 148
frame #35: 0x00007fff6bb3cb8b libsystem_pthread.dylib`thread_start + 15
thread #36
frame #0: 0x00007fff6ba80882 libsystem_kernel.dylib`__psynch_cvwait + 10
frame #1: 0x00007fff6bb41425 libsystem_pthread.dylib`_pthread_cond_wait + 698
frame #2: 0x000000010024d78c libvlccore.dylib`vlc_atomic_wait(addr=0x000070000cd73f10, value=0) at wait.c:84:9
frame #3: 0x0000000100237433 libvlccore.dylib`vlc_cond_wait(cond=0x0000000113d28e88, mutex=0x0000000113d28e60) at threads.c:345:5
frame #4: 0x000000010b82a812 libprefetch_plugin.dylib`Thread(data=0x0000000113d28980) at prefetch.c:183:13
frame #5: 0x00007fff6bb41109 libsystem_pthread.dylib`_pthread_start + 148
frame #6: 0x00007fff6bb3cb8b libsystem_pthread.dylib`thread_start + 15
thread #37
frame #0: 0x00007fff6ba843d6 libsystem_kernel.dylib`poll + 10
frame #1: 0x000000010023397d libvlccore.dylib`vlc_poll_i11e(fds=0x000070000ce76e10, nfds=1, timeout=-1) at interrupt.c:371:16
frame #2: 0x0000000100220486 libvlccore.dylib`vlc_tls_Read(session=0x000000011ceb2760, buf=0x00000001181f9080, len=32768, waitall=true) at stream.c:90:9
frame #3: 0x000000010c3cc7fe libadaptive_plugin.dylib`adaptive::http::Transport::read(this=0x000000011fe20cf0, p_buffer=0x00000001181f9080, len=32768) at Transport.cpp:89:12
frame #4: 0x000000010c3c340f libadaptive_plugin.dylib`adaptive::http::HTTPConnection::read(this=0x000000011fe1d8c0, p_buffer=0x00000001181f9080, len=32768) at HTTPConnection.cpp:231:44
frame #5: 0x000000010c3ba91e libadaptive_plugin.dylib`adaptive::http::HTTPChunkBufferedSource::bufferize(this=0x000000011ced08c0, readsize=32768) at Chunk.cpp:394:31
frame #6: 0x000000010c3bf5df libadaptive_plugin.dylib`adaptive::http::Downloader::Run(this=0x000000011fe29a30) at Downloader.cpp:111:18
frame #7: 0x000000010c3bed8d libadaptive_plugin.dylib`adaptive::http::Downloader::downloaderThread(opaque=0x000000011fe29a30) at Downloader.cpp:90:15
frame #8: 0x00007fff6bb41109 libsystem_pthread.dylib`_pthread_start + 148
frame #9: 0x00007fff6bb3cb8b libsystem_pthread.dylib`thread_start + 15
thread #38
frame #0: 0x00007fff6ba7f4ce libsystem_kernel.dylib`__workq_kernreturn + 10
frame #1: 0x00007fff6bb3daa1 libsystem_pthread.dylib`_pthread_wqthread + 390
frame #2: 0x00007fff6bb3cb77 libsystem_pthread.dylib`start_wqthread + 15
thread #39
frame #0: 0x00007fff6bb3cb68 libsystem_pthread.dylib`start_wqthread
thread #40
frame #0: 0x00007fff6bb3cb68 libsystem_pthread.dylib`start_wqthread
thread #41
frame #0: 0x0000000000000000
This will make it impossible to play any further files and will block closing VLC.