tvOS - freezes and thread leakage
Posted: 21 Feb 2016 10:56
Hi,
I prepare an App for tvOS using VLCKit. During testflight beta (about 30 people testing) I often get reports about poor playback performance, jittering video and audio and in worst case playback freezes.
What I found while inspecting the issues was:
Live-TV stream URL is reported as libvlc_media_type_file, not as libvlc_media_type_stream
This is not as expected, as the URL is looking like http://192.168.0.11:8001/1:0:19:283D:3FB:1:C00000:0:0:0:
This does not look like a file to me. VLCKit is just forwarding the media type info it receives from libVLC. Not sure, whether this could make a difference in playback performance and position changes are not available as expected, but this simply does not look correct.
several threads created through playback don't get released/joined
With the Debug navigator in Xcode I saw, that when I open a video for playback, I wait until playback has been started, then I stop playback and close the stream, the instance - whatever I can manually close and also I make sure the dealloc method of the mediaplayer gets invoked (setting myviewcontroller.mediaplayer to nil), some threads do not get released. Performing this multiple times (like zapping through the stations) more and more threads get into a deadlock state.
Research results are, that threads are waiting at _pthread_cond_wait(...), which in this case is called in vlc/src/playlist/thread.c Line 497. I took many stack backtraces (lldb: bt all) and at least one threads is getting locked there, sometimes multiple ones.
Another thread is deadlocked in [VLCEventManager startEventLoop](self=<unavailable>, _cmd=<unavailable>) + 296 at VLCEventManager.m:154, even the event manager should already have been released. (This might be VLCKit specific but not sure, VLCKit is just a wrapper around libVLC).
I finally was able to catch a stack backtraces during playback freeze
During these freezes, sometimes I can still close the player. For clsoing I stop playback, poll up to 1000 times with usleep(1000) waits, until the media property is changing to stopped before I actually try to release all items (media = nil, mediaplayer = nil, etc...). In case of freezes, I run into a timeout and try to close the player anyway. Unfortunately this leaves the stream open (which stops my STB to go to deep sleep power mode). When I then open a new player it works, often with jitters. But sometimes playback of the stream does not start or the App is not responsive at alland requires to a force quit.
Now just let me share the stack backtraces - Xcode is a bit buggy there.
1st backtrace before any player has been created. I use several threads to receive the XML information about Bouquets, TV stations, EPG Info etc. but all of these tasks should be completed already.
2nd backtrace after creating one player, watched playback for a few seconds, then close the player:
3rd backtrace later after multiple creations and releasings of media player, current playback freezing:
I wanted to add a screenshot, but this is not available in this forum. The screenshot shows the numerous threads still opened. A few are really busy with stream decoding and playback, but more and more a idling. I once have seen, the app has created about 60 threads, and only 15 got released. Overall about 20 idling threads created by libVLC- after just 3 mediaplayer open & close cycles. Imagine to zap through 20 TV stations... would result in about 50+ idling threads that do not get stopped/joined.
I prepare an App for tvOS using VLCKit. During testflight beta (about 30 people testing) I often get reports about poor playback performance, jittering video and audio and in worst case playback freezes.
What I found while inspecting the issues was:
Live-TV stream URL is reported as libvlc_media_type_file, not as libvlc_media_type_stream
This is not as expected, as the URL is looking like http://192.168.0.11:8001/1:0:19:283D:3FB:1:C00000:0:0:0:
This does not look like a file to me. VLCKit is just forwarding the media type info it receives from libVLC. Not sure, whether this could make a difference in playback performance and position changes are not available as expected, but this simply does not look correct.
several threads created through playback don't get released/joined
With the Debug navigator in Xcode I saw, that when I open a video for playback, I wait until playback has been started, then I stop playback and close the stream, the instance - whatever I can manually close and also I make sure the dealloc method of the mediaplayer gets invoked (setting myviewcontroller.mediaplayer to nil), some threads do not get released. Performing this multiple times (like zapping through the stations) more and more threads get into a deadlock state.
Research results are, that threads are waiting at _pthread_cond_wait(...), which in this case is called in vlc/src/playlist/thread.c Line 497. I took many stack backtraces (lldb: bt all) and at least one threads is getting locked there, sometimes multiple ones.
Another thread is deadlocked in [VLCEventManager startEventLoop](self=<unavailable>, _cmd=<unavailable>) + 296 at VLCEventManager.m:154, even the event manager should already have been released. (This might be VLCKit specific but not sure, VLCKit is just a wrapper around libVLC).
I finally was able to catch a stack backtraces during playback freeze
During these freezes, sometimes I can still close the player. For clsoing I stop playback, poll up to 1000 times with usleep(1000) waits, until the media property is changing to stopped before I actually try to release all items (media = nil, mediaplayer = nil, etc...). In case of freezes, I run into a timeout and try to close the player anyway. Unfortunately this leaves the stream open (which stops my STB to go to deep sleep power mode). When I then open a new player it works, often with jitters. But sometimes playback of the stream does not start or the App is not responsive at alland requires to a force quit.
Now just let me share the stack backtraces - Xcode is a bit buggy there.
1st backtrace before any player has been created. I use several threads to receive the XML information about Bouquets, TV stations, EPG Info etc. but all of these tasks should be completed already.
Code: Select all
(lldb) bt all
* thread #1: tid = 0x1c0b13, 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
* frame #0: 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8
frame #1: 0x00000001858e5338 libsystem_kernel.dylib`mach_msg + 72
frame #2: 0x0000000185d14aa8 CoreFoundation`__CFRunLoopServiceMachPort + 196
frame #3: 0x0000000185d127ac CoreFoundation`__CFRunLoopRun + 1032
frame #4: 0x0000000185c416c0 CoreFoundation`CFRunLoopRunSpecific + 384
frame #5: 0x000000018714c088 GraphicsServices`GSEventRunModal + 180
frame #6: 0x000000018a9edd38 UIKit`UIApplicationMain + 204
frame #7: 0x00000001000f19b4 vuplusTV`main(argc=1, argv=0x000000016fd37a70) + 124 at main.m:14
frame #8: 0x00000001857e2974 libdyld.dylib`start + 4
thread #3: tid = 0x1c0b29, 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x00000001859c5530 libsystem_pthread.dylib`_pthread_wqthread + 1284
thread #4: tid = 0x1c0b2a, 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x00000001859c5530 libsystem_pthread.dylib`_pthread_wqthread + 1284
thread #5: tid = 0x1c0b2c, 0x00000001859014fc libsystem_kernel.dylib`kevent_qos + 8, queue = 'com.apple.libdispatch-manager'
frame #0: 0x00000001859014fc libsystem_kernel.dylib`kevent_qos + 8
frame #1: 0x0000000101ef2270 libdispatch.dylib`_dispatch_mgr_invoke + 232
frame #2: 0x0000000101edfe2c libdispatch.dylib`_dispatch_mgr_thread + 52
thread #6: tid = 0x1c0b2d, 0x0000000185900440 libsystem_kernel.dylib`__semwait_signal + 8, name = 'gputools.smt_poll.0x14d642b60'
frame #0: 0x0000000185900440 libsystem_kernel.dylib`__semwait_signal + 8
frame #1: 0x000000018581d5cc libsystem_c.dylib`nanosleep + 212
frame #2: 0x000000018581d4ec libsystem_c.dylib`usleep + 68
frame #3: 0x0000000101f4c9f0 GPUToolsCore`smt_poll_thread_entry(void*) + 140
frame #4: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #5: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #9: tid = 0x1c0b3b, 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.NSURLConnectionLoader'
frame #0: 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8
frame #1: 0x00000001858e5338 libsystem_kernel.dylib`mach_msg + 72
frame #2: 0x0000000185d14aa8 CoreFoundation`__CFRunLoopServiceMachPort + 196
frame #3: 0x0000000185d127ac CoreFoundation`__CFRunLoopRun + 1032
frame #4: 0x0000000185c416c0 CoreFoundation`CFRunLoopRunSpecific + 384
frame #5: 0x00000001863b094c CFNetwork`+[NSURLConnection(Loader) _resourceLoadLoop:] + 412
frame #6: 0x000000018671bd80 Foundation`__NSThread__start__ + 1000
frame #7: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #8: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #13: tid = 0x1c0b3c, 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x00000001859c5530 libsystem_pthread.dylib`_pthread_wqthread + 1284
thread #10: tid = 0x1c0b3d, 0x0000000185900368 libsystem_kernel.dylib`__select + 8, name = 'com.apple.CFSocket.private'
frame #0: 0x0000000185900368 libsystem_kernel.dylib`__select + 8
frame #1: 0x0000000185d1b010 CoreFoundation`__CFSocketManager + 648
frame #2: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #3: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #11: tid = 0x1c0b3e, 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x00000001859c5530 libsystem_pthread.dylib`_pthread_wqthread + 1284
thread #12: tid = 0x1c0b3f, 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x00000001859c5530 libsystem_pthread.dylib`_pthread_wqthread + 1284
(lldb)
Code: Select all
2016-02-20 15:15:08.884 vuplusTV[2325:1837843] creating player instance using shared library
shader program 1: WARNING: Output of vertex shader 'TexCoord1' not read by fragment shader
WARNING: Output of vertex shader 'TexCoord2' not read by fragment shader
2016-02-20 15:15:28.809 vuplusTV[2325:1837843] stopped
(lldb) bt all
warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available.
* thread #1: tid = 0x1c0b13, 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
* frame #0: 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8
frame #1: 0x00000001858e5338 libsystem_kernel.dylib`mach_msg + 72
frame #2: 0x0000000185d14aa8 CoreFoundation`__CFRunLoopServiceMachPort + 196
frame #3: 0x0000000185d127ac CoreFoundation`__CFRunLoopRun + 1032
frame #4: 0x0000000185c416c0 CoreFoundation`CFRunLoopRunSpecific + 384
frame #5: 0x000000018714c088 GraphicsServices`GSEventRunModal + 180
frame #6: 0x000000018a9edd38 UIKit`UIApplicationMain + 204
frame #7: 0x00000001000f19b4 vuplusTV`main(argc=1, argv=0x000000016fd37a70) + 124 at main.m:14
frame #8: 0x00000001857e2974 libdyld.dylib`start + 4
thread #5: tid = 0x1c0b2c, 0x00000001859014fc libsystem_kernel.dylib`kevent_qos + 8, queue = 'com.apple.libdispatch-manager'
frame #0: 0x00000001859014fc libsystem_kernel.dylib`kevent_qos + 8
frame #1: 0x0000000101ef2270 libdispatch.dylib`_dispatch_mgr_invoke + 232
frame #2: 0x0000000101edfe2c libdispatch.dylib`_dispatch_mgr_thread + 52
thread #6: tid = 0x1c0b2d, 0x0000000185900440 libsystem_kernel.dylib`__semwait_signal + 8, name = 'gputools.smt_poll.0x14d642b60'
frame #0: 0x0000000185900440 libsystem_kernel.dylib`__semwait_signal + 8
frame #1: 0x000000018581d5cc libsystem_c.dylib`nanosleep + 212
frame #2: 0x000000018581d4ec libsystem_c.dylib`usleep + 68
frame #3: 0x0000000101f4c9f0 GPUToolsCore`smt_poll_thread_entry(void*) + 140
frame #4: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #5: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #9: tid = 0x1c0b3b, 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.NSURLConnectionLoader'
frame #0: 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8
frame #1: 0x00000001858e5338 libsystem_kernel.dylib`mach_msg + 72
frame #2: 0x0000000185d14aa8 CoreFoundation`__CFRunLoopServiceMachPort + 196
frame #3: 0x0000000185d127ac CoreFoundation`__CFRunLoopRun + 1032
frame #4: 0x0000000185c416c0 CoreFoundation`CFRunLoopRunSpecific + 384
frame #5: 0x00000001863b094c CFNetwork`+[NSURLConnection(Loader) _resourceLoadLoop:] + 412
frame #6: 0x000000018671bd80 Foundation`__NSThread__start__ + 1000
frame #7: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #8: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #10: tid = 0x1c0b3d, 0x0000000185900368 libsystem_kernel.dylib`__select + 8, name = 'com.apple.CFSocket.private'
frame #0: 0x0000000185900368 libsystem_kernel.dylib`__select + 8
frame #1: 0x0000000185d1b010 CoreFoundation`__CFSocketManager + 648
frame #2: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #3: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #14: tid = 0x1c0b96, 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x00000001859c5530 libsystem_pthread.dylib`_pthread_wqthread + 1284
thread #22: tid = 0x1c0bb7, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x0000000100119eac vuplusTV`Thread(data=0x000000014d7d8c90) + 156 at thread.c:497
frame #3: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #4: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #17: tid = 0x1c0bb8, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x00000001000f9818 vuplusTV`-[VLCEventManager startEventLoop](self=<unavailable>, _cmd=<unavailable>) + 296 at VLCEventManager.m:154
frame #3: 0x00000001000f9680 vuplusTV`EventDispatcherMainLoop(user_data=<unavailable>) + 20 at VLCEventManager.m:94
frame #4: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #5: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #19: tid = 0x1c0bc1, 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x00000001859c5530 libsystem_pthread.dylib`_pthread_wqthread + 1284
thread #20: tid = 0x1c0bc2, 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x00000001859c5530 libsystem_pthread.dylib`_pthread_wqthread + 1284
thread #28: tid = 0x1c0bd6, 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8, name = 'AVAudioSession Notify Thread'
frame #0: 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8
frame #1: 0x00000001858e5338 libsystem_kernel.dylib`mach_msg + 72
frame #2: 0x0000000185d14aa8 CoreFoundation`__CFRunLoopServiceMachPort + 196
frame #3: 0x0000000185d127ac CoreFoundation`__CFRunLoopRun + 1032
frame #4: 0x0000000185c416c0 CoreFoundation`CFRunLoopRunSpecific + 384
frame #5: 0x000000018bd7e208 libAVFAudio.dylib`GenericRunLoopThread::Entry(void*) + 164
frame #6: 0x000000018bd5319c libAVFAudio.dylib`CAPThread::Entry(CAPThread*) + 84
frame #7: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #8: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
Code: Select all
2016-02-21 01:39:22.799 vuplusTV[2492:1877076] Failed to load DataDetectorsUI.framework ()
2016-02-21 01:39:28.347 vuplusTV[2492:1877076] creating player instance with private library as options were given
2016-02-21 01:39:28.359 vuplusTV[2492:1877076] mediaplayer madie type: 1
shader program 1: WARNING: Output of vertex shader 'TexCoord1' not read by fragment shader
WARNING: Output of vertex shader 'TexCoord2' not read by fragment shader
2016-02-21 01:39:41.478 vuplusTV[2492:1877076] stopped
2016-02-21 01:39:44.491 vuplusTV[2492:1877076] creating player instance with private library as options were given
2016-02-21 01:39:44.505 vuplusTV[2492:1877076] mediaplayer madie type: 1
shader program 1: WARNING: Output of vertex shader 'TexCoord1' not read by fragment shader
WARNING: Output of vertex shader 'TexCoord2' not read by fragment shader
2016-02-21 01:42:42.156 vuplusTV[2492:1877076] stopped
2016-02-21 01:42:56.909 vuplusTV[2492:1877076] creating player instance with private library as options were given
2016-02-21 01:42:56.922 vuplusTV[2492:1877076] mediaplayer madie type: 1
shader program 1: WARNING: Output of vertex shader 'TexCoord1' not read by fragment shader
WARNING: Output of vertex shader 'TexCoord2' not read by fragment shader
(lldb) bt all
warning: could not load any Objective-C class information. This will significantly reduce the quality of type information available.
* thread #1: tid = 0x1ca454, 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
* frame #0: 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8
frame #1: 0x00000001858e5338 libsystem_kernel.dylib`mach_msg + 72
frame #2: 0x0000000185d14aa8 CoreFoundation`__CFRunLoopServiceMachPort + 196
frame #3: 0x0000000185d127ac CoreFoundation`__CFRunLoopRun + 1032
frame #4: 0x0000000185c416c0 CoreFoundation`CFRunLoopRunSpecific + 384
frame #5: 0x000000018714c088 GraphicsServices`GSEventRunModal + 180
frame #6: 0x000000018a9edd38 UIKit`UIApplicationMain + 204
frame #7: 0x0000000100075964 vuplusTV`main(argc=1, argv=0x000000016fdb3a70) + 124 at main.m:14
frame #8: 0x00000001857e2974 libdyld.dylib`start + 4
thread #5: tid = 0x1ca467, 0x00000001859014fc libsystem_kernel.dylib`kevent_qos + 8, queue = 'com.apple.libdispatch-manager'
frame #0: 0x00000001859014fc libsystem_kernel.dylib`kevent_qos + 8
frame #1: 0x0000000101e82270 libdispatch.dylib`_dispatch_mgr_invoke + 232
frame #2: 0x0000000101e6fe2c libdispatch.dylib`_dispatch_mgr_thread + 52
thread #6: tid = 0x1ca468, 0x0000000185900440 libsystem_kernel.dylib`__semwait_signal + 8, name = 'gputools.smt_poll.0x144537180'
frame #0: 0x0000000185900440 libsystem_kernel.dylib`__semwait_signal + 8
frame #1: 0x000000018581d5cc libsystem_c.dylib`nanosleep + 212
frame #2: 0x000000018581d4ec libsystem_c.dylib`usleep + 68
frame #3: 0x0000000101edc9f0 GPUToolsCore`smt_poll_thread_entry(void*) + 140
frame #4: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #5: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #9: tid = 0x1ca475, 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8, name = 'com.apple.NSURLConnectionLoader'
frame #0: 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8
frame #1: 0x00000001858e5338 libsystem_kernel.dylib`mach_msg + 72
frame #2: 0x0000000185d14aa8 CoreFoundation`__CFRunLoopServiceMachPort + 196
frame #3: 0x0000000185d127ac CoreFoundation`__CFRunLoopRun + 1032
frame #4: 0x0000000185c416c0 CoreFoundation`CFRunLoopRunSpecific + 384
frame #5: 0x00000001863b094c CFNetwork`+[NSURLConnection(Loader) _resourceLoadLoop:] + 412
frame #6: 0x000000018671bd80 Foundation`__NSThread__start__ + 1000
frame #7: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #8: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #11: tid = 0x1ca47a, 0x0000000185900368 libsystem_kernel.dylib`__select + 8, name = 'com.apple.CFSocket.private'
frame #0: 0x0000000185900368 libsystem_kernel.dylib`__select + 8
frame #1: 0x0000000185d1b010 CoreFoundation`__CFSocketManager + 648
frame #2: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #3: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #15: tid = 0x1ca48b, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x000000010009de5c vuplusTV`Thread(data=0x0000000145872a70) + 156 at thread.c:497
frame #3: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #4: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #16: tid = 0x1ca48c, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x000000010009de5c vuplusTV`Thread(data=0x0000000145880780) + 156 at thread.c:497
frame #3: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #4: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #13: tid = 0x1ca48d, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x000000010007d7c8 vuplusTV`-[VLCEventManager startEventLoop](self=<unavailable>, _cmd=<unavailable>) + 296 at VLCEventManager.m:154
frame #3: 0x000000010007d630 vuplusTV`EventDispatcherMainLoop(user_data=<unavailable>) + 20 at VLCEventManager.m:94
frame #4: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #5: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #23: tid = 0x1ca4b9, 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8, name = 'AVAudioSession Notify Thread'
frame #0: 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8
frame #1: 0x00000001858e5338 libsystem_kernel.dylib`mach_msg + 72
frame #2: 0x0000000185d14aa8 CoreFoundation`__CFRunLoopServiceMachPort + 196
frame #3: 0x0000000185d127ac CoreFoundation`__CFRunLoopRun + 1032
frame #4: 0x0000000185c416c0 CoreFoundation`CFRunLoopRunSpecific + 384
frame #5: 0x000000018bd7e208 libAVFAudio.dylib`GenericRunLoopThread::Entry(void*) + 164
frame #6: 0x000000018bd5319c libAVFAudio.dylib`CAPThread::Entry(CAPThread*) + 84
frame #7: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #8: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #61: tid = 0x1ca4e2, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x000000010009de5c vuplusTV`Thread(data=0x00000001447e6880) + 156 at thread.c:497
frame #3: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #4: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #62: tid = 0x1ca65b, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x000000010009de5c vuplusTV`Thread(data=0x0000000145843410) + 156 at thread.c:497
frame #3: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #4: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #47: tid = 0x1ca661, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x00000001000a971c vuplusTV`input_DecoderWait(p_dec=0x000000014a9b0cf0) + 104 at decoder.c:2175
frame #3: 0x00000001000b26ac vuplusTV`EsOutDecodersStopBuffering(out=<unavailable>, b_forced=<unavailable>) + 348 at es_out.c:665
frame #4: 0x00000001000b163c vuplusTV`EsOutControlLocked(out=0x0000000145b399e0, i_query=<unavailable>, args=<unavailable>) + 5280 at es_out.c:2354
frame #5: 0x00000001000adeb0 vuplusTV`EsOutControl(out=0x0000000145b399e0, i_query=<unavailable>, args=<unavailable>) + 60 at es_out.c:2722
frame #6: 0x00000001000b4424 vuplusTV`es_out_Control [inlined] es_out_vaControl(out=<unavailable>, i_query=<unavailable>) + 32 at vlc_es_out.h:125
frame #7: 0x00000001000b4418 vuplusTV`es_out_Control(out=<unavailable>, i_query=<unavailable>) + 20 at vlc_es_out.h:134
frame #8: 0x00000001000b4318 vuplusTV`CmdExecuteControl(p_out=<unavailable>, p_cmd=<unavailable>) + 204 at es_out_timeshift.c:1535
frame #9: 0x00000001000b3114 vuplusTV`Control + 12 at es_out_timeshift.c:650
frame #10: 0x00000001000b3108 vuplusTV`Control(p_out=<unavailable>, i_query=<unavailable>, args=<unavailable>) + 548 at es_out_timeshift.c:755
frame #11: 0x000000010086571c vuplusTV`es_out_Control [inlined] es_out_vaControl + 12 at vlc_es_out.h:125
frame #12: 0x0000000100865710 vuplusTV`es_out_Control(out=<unavailable>, i_query=<unavailable>) + 20 at vlc_es_out.h:134
frame #13: 0x00000001008658a4 vuplusTV`ProgramSetPCR(p_demux=<unavailable>, p_pmt=<unavailable>, i_pcr=<unavailable>) + 380 at ts.c:3103
frame #14: 0x00000001008653e8 vuplusTV`PCRHandle(p_demux=<unavailable>, pid=<unavailable>, p_bk=<unavailable>) + 716 at ts.c:3187
frame #15: 0x0000000100862d6c vuplusTV`Demux [inlined] GatherData(p_demux=<unavailable>, pid=<unavailable>, p_bk=<unavailable>) + 12 at ts.c:3363
frame #16: 0x0000000100862d60 vuplusTV`Demux(p_demux=0x0000000145802e70) + 2816 at ts.c:1330
frame #17: 0x00000001000b72fc vuplusTV`MainLoop [inlined] demux_Demux(p_demux=0x0000000145802e70) + 16 at vlc_demux.h:302
frame #18: 0x00000001000b72ec vuplusTV`MainLoop [inlined] MainLoopDemux(p_input=<unavailable>, pb_changed=0x0000000000000000) + 28 at input.c:538
frame #19: 0x00000001000b72d0 vuplusTV`MainLoop(p_input=0x000000014466d480, b_interactive=<unavailable>) + 412 at input.c:683
frame #20: 0x00000001000b82e0 vuplusTV`Run(obj=0x000000014466d480) + 52 at input.c:475
frame #21: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #22: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #49: tid = 0x1ca66b, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x00000001000a99c4 vuplusTV`DecoderThread(p_data=0x000000014a9b0cf0) + 192 at decoder.c:1488
frame #3: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #4: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #50: tid = 0x1ca66c, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x00000001000a99c4 vuplusTV`DecoderThread(p_data=0x000000014489cef0) + 192 at decoder.c:1488
frame #3: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #4: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #52: tid = 0x1ca675, 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8, name = 'AURemoteIO::IOThread'
frame #0: 0x00000001858e54bc libsystem_kernel.dylib`mach_msg_trap + 8
frame #1: 0x00000001858e5338 libsystem_kernel.dylib`mach_msg + 72
frame #2: 0x00000001882e718c AudioToolbox`AURemoteIO::IOThread::Run() + 112
frame #3: 0x00000001882eacbc AudioToolbox`AURemoteIO::IOThread::Entry(void*) + 12
frame #4: 0x00000001881f4a70 AudioToolbox`CAPThread::Entry(CAPThread*) + 124
frame #5: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #6: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #51: tid = 0x1ca67c, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x000000010071c2b8 vuplusTV`frame_worker_thread(arg=<unavailable>) + 160 at pthread_frame.c:133
frame #3: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #4: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #53: tid = 0x1ca67d, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x000000010071c2b8 vuplusTV`frame_worker_thread(arg=<unavailable>) + 160 at pthread_frame.c:133
frame #3: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #4: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #54: tid = 0x1ca67e, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6ce8 libsystem_pthread.dylib`_pthread_cond_wait + 648
frame #2: 0x000000010071c2b8 vuplusTV`frame_worker_thread(arg=<unavailable>) + 160 at pthread_frame.c:133
frame #3: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #4: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #55: tid = 0x1ca680, 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #0: 0x00000001858fff48 libsystem_kernel.dylib`__psynch_cvwait + 8
frame #1: 0x00000001859c6d20 libsystem_pthread.dylib`_pthread_cond_wait + 704
frame #2: 0x00000001000ea654 vuplusTV`vlc_cond_timedwait(p_condvar=<unavailable>, p_mutex=<unavailable>, deadline=<unavailable>) + 216 at thread.c:291
frame #3: 0x00000001000c0dc8 vuplusTV`vout_control_Pop(ctrl=0x000000014508baa0, cmd=0x000000016ee92de8, deadline=<unavailable>) + 88 at control.c:189
frame #4: 0x00000001000c5478 vuplusTV`Thread(object=0x000000014508b8f0) + 136 at video_output.c:1583
frame #5: 0x00000001859c7b28 libsystem_pthread.dylib`_pthread_body + 156
frame #6: 0x00000001859c7a8c libsystem_pthread.dylib`_pthread_start + 156
thread #56: tid = 0x1ca689, 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x00000001859c5530 libsystem_pthread.dylib`_pthread_wqthread + 1284
thread #58: tid = 0x1ca6bc, 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x00000001859c5530 libsystem_pthread.dylib`_pthread_wqthread + 1284
thread #59: tid = 0x1ca6bf, 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #0: 0x0000000185900b6c libsystem_kernel.dylib`__workq_kernreturn + 8
frame #1: 0x00000001859c5530 libsystem_pthread.dylib`_pthread_wqthread + 1284