[Interest] Will TSAN_OPTIONS=detect_deadlocks=1 work when Qt is compiled with -sanitize thread?

Nuno Santos nuno.santos at imaginando.pt
Fri Jul 19 16:15:19 CEST 2024


Alexey,

Thanks for your reply.

Sure, here it is:

(lldb) bt all
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
  * frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04bc4 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 64
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x000000010313a960 BAM`QSGThreadedRenderLoop::polishAndSync(QSGThreadedRenderLoop::Window*, bool) + 1544
    frame #5: 0x000000010313ae38 BAM`QSGThreadedRenderLoop::handleUpdateRequest(QQuickWindow*) + 364
    frame #6: 0x0000000102fd8ad0 BAM`QQuickWindow::event(QEvent*) + 2608
    frame #7: 0x0000000103cde3d8 BAM`QCoreApplicationPrivate::notify_helper(QObject*, QEvent*) + 384
    frame #8: 0x0000000103cde1a0 BAM`QCoreApplication::notifyInternal2(QObject*, QEvent*) + 292
    frame #9: 0x00000001032de3d4 BAM`QPlatformWindow::deliverUpdateRequest() + 68
    frame #10: 0x00000001028abb84 BAM`QIOSScreen::deliverUpdateRequests() const + 148
    frame #11: 0x0000000193e17ecc QuartzCore`CA::Display::DisplayLinkItem::dispatch_(CA::SignPost::Interval<(CA::SignPost::CAEventCode)835322056>&) + 48
    frame #12: 0x0000000193e16230 QuartzCore`CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 876
    frame #13: 0x0000000193e15dd0 QuartzCore`CA::Display::DisplayLink::dispatch_deferred_display_links(unsigned int) + 352
    frame #14: 0x0000000194a0d76c UIKitCore`_UIUpdateSequenceRun + 84
    frame #15: 0x0000000194a0d3b0 UIKitCore`schedulerStepScheduledMainSection + 172
    frame #16: 0x0000000194a0e254 UIKitCore`runloopSourceCallback + 92
    frame #17: 0x000000019272b834 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
    frame #18: 0x000000019272b7c8 CoreFoundation`__CFRunLoopDoSource0 + 176
    frame #19: 0x0000000192729298 CoreFoundation`__CFRunLoopDoSources0 + 244
    frame #20: 0x0000000192728484 CoreFoundation`__CFRunLoopRun + 828
    frame #21: 0x0000000192727cd8 CoreFoundation`CFRunLoopRunSpecific + 608
    frame #22: 0x00000001d75d81a8 GraphicsServices`GSEventRunModal + 164
    frame #23: 0x0000000194d6090c UIKitCore`-[UIApplication _run] + 888
    frame #24: 0x0000000194e149d0 UIKitCore`UIApplicationMain + 340
    frame #25: 0x00000001028a35cc BAM`qt_main_wrapper + 800
    frame #26: 0x00000001b5dd9e4c dyld`start + 2240
  thread #2, queue = 'com.Metal.CommandQueueDispatch'
    frame #0: 0x000000019b086558 IOKit`iokit_user_client_trap + 8
    frame #1: 0x000000020e946b8c IOGPU`IOGPUCommandQueueSubmitCommandBuffers + 164
    frame #2: 0x000000020e94687c IOGPU`-[IOGPUMetalCommandQueue _submitCommandBuffers:count:] + 356
    frame #3: 0x000000020e9466f0 IOGPU`-[IOGPUMetalCommandQueue submitCommandBuffers:count:] + 72
    frame #4: 0x00000001922d7ad4 Metal`-[_MTLCommandQueue _submitAvailableCommandBuffers] + 504
    frame #5: 0x00000001085be7bc libdispatch.dylib`_dispatch_client_callout + 20
    frame #6: 0x00000001085c18e0 libdispatch.dylib`_dispatch_continuation_pop + 676
    frame #7: 0x00000001085d8cc8 libdispatch.dylib`_dispatch_source_latch_and_call + 480
    frame #8: 0x00000001085d7718 libdispatch.dylib`_dispatch_source_invoke + 860
    frame #9: 0x00000001085c64a4 libdispatch.dylib`_dispatch_lane_serial_drain + 376
    frame #10: 0x00000001085c7408 libdispatch.dylib`_dispatch_lane_invoke + 408
    frame #11: 0x00000001085d4404 libdispatch.dylib`_dispatch_root_queue_drain_deferred_wlh + 328
    frame #12: 0x00000001085d3a38 libdispatch.dylib`_dispatch_workloop_worker_thread + 444
    frame #13: 0x00000001ef50a934 libsystem_pthread.dylib`_pthread_wqthread + 288
  thread #5
    frame #0: 0x00000001ef5070c4 libsystem_pthread.dylib`start_wqthread
  thread #7, name = 'com.apple.uikit.eventfetch-thread'
    frame #0: 0x00000001db7a4808 libsystem_kernel.dylib`mach_msg2_trap + 8
    frame #1: 0x00000001db7a8008 libsystem_kernel.dylib`mach_msg2_internal + 80
    frame #2: 0x00000001db7a7f20 libsystem_kernel.dylib`mach_msg_overwrite + 436
    frame #3: 0x00000001db7a7d60 libsystem_kernel.dylib`mach_msg + 24
    frame #4: 0x0000000192728f5c CoreFoundation`__CFRunLoopServiceMachPort + 160
    frame #5: 0x0000000192728600 CoreFoundation`__CFRunLoopRun + 1208
    frame #6: 0x0000000192727cd8 CoreFoundation`CFRunLoopRunSpecific + 608
    frame #7: 0x0000000191648e4c Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
    frame #8: 0x0000000191648c9c Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 64
    frame #9: 0x0000000194d74640 UIKitCore`-[UIEventFetcher threadMain] + 420
    frame #10: 0x000000019165f718 Foundation`__NSThread__start__ + 732
    frame #11: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #8
    frame #0: 0x00000001ef5070c4 libsystem_pthread.dylib`start_wqthread
  thread #10, name = 'Link Main'
    frame #0: 0x00000001db7ab608 libsystem_kernel.dylib`kevent + 8
    frame #1: 0x00000001024f6e50 BAM`link_asio_1_28_0::detail::kqueue_reactor::run(long, link_asio_1_28_0::detail::op_queue<link_asio_1_28_0::detail::scheduler_operation>&) + 300
    frame #2: 0x00000001024f8340 BAM`link_asio_1_28_0::detail::scheduler::do_run_one(link_asio_1_28_0::detail::conditionally_enabled_mutex::scoped_lock&, link_asio_1_28_0::detail::scheduler_thread_info&, std::__1::error_code const&) + 296
    frame #3: 0x00000001024f80b4 BAM`link_asio_1_28_0::detail::scheduler::run(std::__1::error_code&) + 268
    frame #4: 0x00000001024f8cf4 BAM`ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>::Context<ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler>(ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler)::'lambda'(link_asio_1_28_0::io_context&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler)::operator()(link_asio_1_28_0::io_context&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler) const + 120
    frame #5: 0x00000001024f8b48 BAM`void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, std::__1::thread ableton::platforms::darwin::ThreadFactory::makeThread<ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>::Context<ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler>(ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler)::'lambda'(link_asio_1_28_0::io_context&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler), std::__1::reference_wrapper<link_asio_1_28_0::io_context>, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler&&, std::__1::reference_wrapper<link_asio_1_28_0::io_context>&&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler&&)::'lambda'(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>::Context<ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler>(ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler)::'lambda'(link_asio_1_28_0::io_context&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler)&&, std::__1::reference_wrapper<link_asio_1_28_0::io_context>&&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler&&), std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>::Context<ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler>(ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler)::'lambda'(link_asio_1_28_0::io_context&, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler), std::__1::reference_wrapper<link_asio_1_28_0::io_context>, ableton::link::Controller<std::__1::function<void (unsigned long)>, std::__1::function<void (ableton::link::Tempo)>, std::__1::function<void (bool)>, ableton::platforms::darwin::Clock, ableton::platforms::stl::Random, ableton::platforms::link_asio_1_28_0::Context<ableton::platforms::posix::ScanIpIfAddrs, ableton::util::NullLog, ableton::platforms::darwin::ThreadFactory>>::UdpSendExceptionHandler>>(void*) + 104
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #11, name = 'Link Dispatcher'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x00000001a2b0e598 libc++.1.dylib`std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l>>>) + 100
    frame #3: 0x00000001025174f0 BAM`ableton::platforms::link_asio_1_28_0::LockFreeCallbackDispatcher<std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l>>, ableton::platforms::darwin::ThreadFactory>::run() + 304
    frame #4: 0x00000001025172c0 BAM`void* std::__1::__thread_proxy[abi:v160006]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, std::__1::thread ableton::platforms::darwin::ThreadFactory::makeThread<ableton::platforms::link_asio_1_28_0::LockFreeCallbackDispatcher<std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l>>, ableton::platforms::darwin::ThreadFactory>::LockFreeCallbackDispatcher(std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l>>)::'lambda'()>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, ableton::platforms::link_asio_1_28_0::LockFreeCallbackDispatcher<std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l>>, ableton::platforms::darwin::ThreadFactory>::LockFreeCallbackDispatcher(std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l>>)::'lambda'()&&)::'lambda'(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, ableton::platforms::link_asio_1_28_0::LockFreeCallbackDispatcher<std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l>>, ableton::platforms::darwin::ThreadFactory>::LockFreeCallbackDispatcher(std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l>>)::'lambda'()&&), std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, ableton::platforms::link_asio_1_28_0::LockFreeCallbackDispatcher<std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l>>, ableton::platforms::darwin::ThreadFactory>::LockFreeCallbackDispatcher(std::__1::function<void ()>, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l>>)::'lambda'()>>(void*) + 100
    frame #5: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #12, name = 'com.apple.CFSocket.private'
    frame #0: 0x00000001db7ac474 libsystem_kernel.dylib`__select + 8
    frame #1: 0x0000000192793b7c CoreFoundation`__CFSocketManager + 640
    frame #2: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #13
    frame #0: 0x00000001db7a4808 libsystem_kernel.dylib`mach_msg2_trap + 8
    frame #1: 0x00000001db7a8008 libsystem_kernel.dylib`mach_msg2_internal + 80
    frame #2: 0x00000001db7a7f20 libsystem_kernel.dylib`mach_msg_overwrite + 436
    frame #3: 0x00000001db7a7d60 libsystem_kernel.dylib`mach_msg + 24
    frame #4: 0x00000001e489d418 CoreMIDI`XServerMachPort::ReceiveMessage(int&, void*, int&) + 104
    frame #5: 0x00000001e48ae4f4 CoreMIDI`MIDIProcess::MIDIInPortThread::Run() + 156
    frame #6: 0x00000001e48abda0 CoreMIDI`CADeprecated::XThread::RunHelper(void*) + 48
    frame #7: 0x00000001e48ada80 CoreMIDI`CADeprecated::CAPThread::Entry(CADeprecated::CAPThread*) + 92
    frame #8: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #14, name = 'QQmlThread'
    frame #0: 0x00000001db7b9268 libsystem_kernel.dylib`poll + 8
    frame #1: 0x0000000103df6c38 BAM`qt_safe_poll(pollfd*, unsigned int, timespec const*) + 460
    frame #2: 0x0000000103df7e00 BAM`QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 740
    frame #3: 0x0000000103ce507c BAM`QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 608
    frame #4: 0x0000000103d86c84 BAM`QThread::exec() + 264
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #15, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #16, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #17, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #18, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #19, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #20, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #21, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #22, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #23, name = 'caulk::deferred_logger'
    frame #0: 0x00000001db7a4784 libsystem_kernel.dylib`semaphore_wait_trap + 8
    frame #1: 0x00000002044af724 caulk`caulk::semaphore::timed_wait(double) + 212
    frame #2: 0x00000002044af5e4 caulk`caulk::concurrent::details::worker_thread::run() + 36
    frame #3: 0x00000002044af52c 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*) + 96
    frame #4: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #24, name = 'caulk.messenger.shared:high'
    frame #0: 0x00000001db7a4784 libsystem_kernel.dylib`semaphore_wait_trap + 8
    frame #1: 0x00000002044af724 caulk`caulk::semaphore::timed_wait(double) + 212
    frame #2: 0x00000002044af5e4 caulk`caulk::concurrent::details::worker_thread::run() + 36
    frame #3: 0x00000002044af52c 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*) + 96
    frame #4: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #25, name = 'AURemoteIO::IOThread'
    frame #0: 0x00000001db7a4784 libsystem_kernel.dylib`semaphore_wait_trap + 8
    frame #1: 0x0000000103dfd2d4 BAM`QBasicMutex::lockInternal(QDeadlineTimer) + 916
    frame #2: 0x0000000103dfcf30 BAM`QBasicMutex::lockInternal() + 48
    frame #3: 0x0000000103cde998 BAM`QCoreApplication::postEvent(QObject*, QEvent*, int) + 152
    frame #4: 0x0000000103ce9758 BAM`QMetaObject::invokeMethodImpl(QObject*, QtPrivate::QSlotObjectBase*, Qt::ConnectionType, void*) + 736
    frame #5: 0x00000001027a895c BAM`DSClip::processSteps(double, bool) + 980
    frame #6: 0x000000010284c2a0 BAM`DSSequencer::processSplit(float*, float*, float*, float*, int) + 440
    frame #7: 0x0000000102805fb8 BAM`DSInstrument::processSplit(float*, float*, float*, float*, int) + 684
    frame #8: 0x00000001025c3f04 BAM`performRender(void*, unsigned int*, AudioTimeStamp const*, unsigned int, unsigned int, AudioBufferList*) + 276
    frame #9: 0x000000020dc8f360 libEmbeddedSystemAUs.dylib`AUConverterBase::RenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int) + 628
    frame #10: 0x000000020dc907d8 libEmbeddedSystemAUs.dylib`AURemoteIO::RenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int) + 192
    frame #11: 0x000000020dc8fea8 libEmbeddedSystemAUs.dylib`ausdk::AUBase::DoRender(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int, AudioBufferList&) + 1968
    frame #12: 0x000000020dc8efc0 libEmbeddedSystemAUs.dylib`AURemoteIO::PerformIO(unsigned int, unsigned int, unsigned int, AudioTimeStamp const&, AudioTimeStamp const&, AudioBufferList const*, AudioBufferList*, int&) + 1360
    frame #13: 0x000000020dc8e7a0 libEmbeddedSystemAUs.dylib`_XPerformIO + 384
    frame #14: 0x00000001b7c5b034 libAudioToolboxUtility.dylib`mshMIGPerform + 288
    frame #15: 0x00000001b7c5af08 libAudioToolboxUtility.dylib`MSHMIGDispatchMessage + 36
    frame #16: 0x000000020dcbc8d0 libEmbeddedSystemAUs.dylib`void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, AURemoteIO::IOThread::IOThread(AURemoteIO&, caulk::thread::attributes const&, caulk::mach::os_workgroup_managed const&)::'lambda'(), std::__1::tuple<>>>(void*) + 580
    frame #17: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #26, name = 'QSGRenderThread'
    frame #0: 0x0000000103567f40 BAM`QRhiMetal::enqueueResourceUpdates(QRhiCommandBuffer*, QRhiResourceUpdateBatch*) + 948
    frame #1: 0x0000000103007724 BAM`QSGBatchRenderer::Renderer::prepareRenderPass(QSGBatchRenderer::Renderer::RenderPassContext*) + 2264
    frame #2: 0x0000000103006dcc BAM`QSGBatchRenderer::Renderer::render() + 36
    frame #3: 0x000000010301bb70 BAM`QSGRenderer::renderScene() + 344
    frame #4: 0x00000001030491ec BAM`QSGRhiLayer::grab() + 2120
    frame #5: 0x0000000103048978 BAM`QSGRhiLayer::updateTexture() + 56
    frame #6: 0x00000001030274f4 BAM`QSGBasicInternalImageNode::preprocess() + 76
    frame #7: 0x000000010301c3f8 BAM`QSGRenderer::preprocess() + 888
    frame #8: 0x000000010301bb60 BAM`QSGRenderer::renderScene() + 328
    frame #9: 0x0000000102fd669c BAM`QQuickWindowPrivate::renderSceneGraph() + 804
    frame #10: 0x00000001031377a0 BAM`QSGRenderThread::syncAndRender() + 968
    frame #11: 0x00000001031388c0 BAM`QSGRenderThread::run() + 288
    frame #12: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #13: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #27, name = 'QNetworkAccessManager thread'
    frame #0: 0x00000001db7b9268 libsystem_kernel.dylib`poll + 8
    frame #1: 0x0000000103df6b00 BAM`qt_safe_poll(pollfd*, unsigned int, timespec const*) + 148
    frame #2: 0x0000000103df7e00 BAM`QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 740
    frame #3: 0x0000000103ce507c BAM`QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 608
    frame #4: 0x0000000103d86c84 BAM`QThread::exec() + 264
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #28, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #29, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #30, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #31, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #32, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #33, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #34, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #35, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #36, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #37, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #38, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #39, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #40, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #41, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #42, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #43, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #44, name = 'Thread (pooled)'
    frame #0: 0x00000001db7aa1cc libsystem_kernel.dylib`__psynch_cvwait + 8
    frame #1: 0x00000001ef5096e4 libsystem_pthread.dylib`_pthread_cond_wait + 1228
    frame #2: 0x0000000103e04c54 BAM`QWaitConditionPrivate::wait(QDeadlineTimer) + 208
    frame #3: 0x0000000103e04b18 BAM`QWaitCondition::wait(QMutex*, QDeadlineTimer) + 148
    frame #4: 0x0000000103dff7c0 BAM`QThreadPoolThread::run() + 896
    frame #5: 0x0000000103dfbfd4 BAM`QThreadPrivate::start(void*) + 360
    frame #6: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #45, name = 'com.apple.audio.toolbox.AUScheduledParameterRefresher'
    frame #0: 0x00000001db7a4784 libsystem_kernel.dylib`semaphore_wait_trap + 8
    frame #1: 0x00000002044af724 caulk`caulk::semaphore::timed_wait(double) + 212
    frame #2: 0x00000002044af5e4 caulk`caulk::concurrent::details::worker_thread::run() + 36
    frame #3: 0x00000002044af52c 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*) + 96
    frame #4: 0x00000001ef50c06c libsystem_pthread.dylib`_pthread_start + 136
  thread #46, queue = 'com.apple.libdispatch-manager'
    frame #0: 0x00000001085e07c0 libdispatch.dylib`_dispatch_event_loop_drain_timers + 624
    frame #1: 0x00000001085d3734 libdispatch.dylib`_dispatch_kevent_worker_thread + 500
    frame #2: 0x00000001ef50a96c libsystem_pthread.dylib`_pthread_wqthread + 344
  thread #47
    frame #0: 0x00000001ef5070c4 libsystem_pthread.dylib`start_wqthread

> On 19 Jul 2024, at 14:04, Alexey Rusakov <ktirf at users.sf.net> wrote:
> 
> Deadlocks usually occur across several threads. Do you have a stack trace for other threads, too?
> 
> Alexey
> 
> On Fri, 2024-07-19 at 12:12 +0100, Nuno Santos via Interest wrote:
>> Dennis,
>> 
>> Thanks for the clarification.
>> 
>> Maybe it is deviating a bit from Qt. It’s probably something I’m not doing correctly from the Qt paradigm perspective but this is one of those problems where I feeling lost.
>> 
>> I’ve just had one of those rare deadlock and it happened like this:
>> 
>> - This is a music making application. I have the audio processing and the GUI.
>> - In the audio render thread, I call the processing of the sequencer which is responsible for handling the music events. 
>> - There are visual representations of this elements that contains the notes that are being played
>> - During the processing of the musical steps, there is a signal that is being called. It got stuck there.
>> 
>> But invoking a method as a queue connection in another thread shouldn’t be a problem, right?
>> 
>> QMetaObject::invokeMethod(this, &DSClip::stepChanged, Qt::QueuedConnection);
>> 
>> This invoke will trigger a signal that will request the DSClip visual instance to be updated on the QML side.
>> 
>> Here is the place it got stuck in the audio render thread. It got locked when invoking the method.
>> 
>> Does this ring any bell?
>> 
>> Thanks!
>> 
>> Best,
>> 
>> Nuno
>> 
>> 
>> 
>>> On 19 Jul 2024, at 12:00, Dennis Luehring <dl.soluz at gmx.net <mailto:dl.soluz at gmx.net>> wrote:
>>> 
>>> Am 19.07.2024 um 12:52 schrieb Nuno Santos:
>>>> Can data race cause deadlocks?
>>>> 
>>>> Or should I explicitly look for deadlock: "lock-order-inversion (potential deadlock)”
>>> 
>>> 
>>> data races can maybe get you into deadlocks someway... but you should
>>> look for lock-order-inversions and fix them (even if very hard to
>>> sometimes understand why they happening)
>>> 
>>> 
>>> btw: the discussion is drifting away from Qt itself :)
>> 
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org <mailto:Interest at qt-project.org>
>> https://lists.qt-project.org/listinfo/interest

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20240719/b75717a0/attachment-0001.htm>


More information about the Interest mailing list