Skip to content

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.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information