Open m0dB opened 3 weeks ago
These findings are probably false positive, because TSAN does not understand PaUtil_FullMemoryBarrier(). However it is possible to anotate the code with __tsan_acquire
, __tsan_release
and firends to make it work.
Do you have interest to try it out? If it turns out that these are real issues. Mixxx will suffer them via Portausdio as well.
Bug Description
PaUtil_WriteRingBuffer / PaUtil_ReadRingBuffer
Fixed by replacing PaUtil ring buffer with a custom implrmentation. The PR needs some final polishing.
Details
```cpp ================== WARNING: ThreadSanitizer: data race (pid=48840) Read of size 4 at 0x000112915ef8 by thread T71 (mutexes: write M0, write M1): #0 PaUtil_WriteRingBuffer:230508612 (mixxx:arm64+0x1021108e8)
#1 FIFO::write(float const*, int) fifo.h:34 (mixxx:arm64+0x1009dd6dc)
#2 EngineSideChain::writeSamples(float const*, int) enginesidechain.cpp:81 (mixxx:arm64+0x1009dd440)
#3 EngineMixer::process(int) enginemixer.cpp:757 (mixxx:arm64+0x1009a9740)
#4 SoundManager::onDeviceOutputCallback(long) soundmanager.cpp:599 (mixxx:arm64+0x10117ac44)
#5 SoundDevicePortAudio::callbackProcessClkRef(long, float*, float const*, PaStreamCallbackTimeInfo const*, unsigned long) sounddeviceportaudio.cpp:998 (mixxx:arm64+0x101172984)
#6 (anonymous namespace)::paV19CallbackClkRef(void const*, void*, unsigned long, PaStreamCallbackTimeInfo const*, unsigned long, void*) sounddeviceportaudio.cpp:69 (mixxx:arm64+0x10116fe5c)
#7 AdaptingOutputOnlyProcess :230508612 (mixxx:arm64+0x10210fed4)
#8 PaUtil_EndBufferProcessing :230508612 (mixxx:arm64+0x10210e09c)
#9 AudioIOProc :230508612 (mixxx:arm64+0x1021185a8)
#10 :230508612 (CoreAudio:arm64e+0xa8d8)
Previous write of size 4 at 0x000112915ef8 by thread T16:
#0 PaUtil_ReadRingBuffer :230508612 (mixxx:arm64+0x102110bd0)
#1 FIFO::read(float*, int) fifo.h:31 (mixxx:arm64+0x1009d2580)
#2 EngineSideChain::run() enginesidechain.cpp:111 (mixxx:arm64+0x1009dd9a8)
#3 QThreadPrivate::start(void*) :230508612 (mixxx:arm64+0x100248f60)
Location is heap block of size 176 at 0x000112915ea0 allocated by main thread:
#0 operator new(unsigned long) :230508612 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x83de0)
#1 EngineMixer::EngineMixer(QSharedPointer>, QString const&, EffectsManager*, std::__1::shared_ptr, bool) enginemixer.cpp:168 (mixxx:arm64+0x1009a45bc)
#2 EngineMixer::EngineMixer(QSharedPointer>, QString const&, EffectsManager*, std::__1::shared_ptr, bool) enginemixer.cpp:52 (mixxx:arm64+0x1009a0018)
#3 EngineMixer* std::__1::construct_at[abi:v160006]>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool, EngineMixer*>(EngineMixer*, QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) construct_at.h:38 (mixxx:arm64+0x100647ae0)
#4 void std::__1::allocator_traits>::construct[abi:v160006]>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool, void, void>(std::__1::allocator&, EngineMixer*, QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) allocator_traits.h:304 (mixxx:arm64+0x100647754)
#5 std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool>(std::__1::allocator, QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) shared_ptr.h:284 (mixxx:arm64+0x1006475c0)
#6 std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool>(std::__1::allocator, QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) shared_ptr.h:276 (mixxx:arm64+0x100646fd8)
#7 std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], QSharedPointer>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool, void>(std::__1::allocator const&, QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) shared_ptr.h:995 (mixxx:arm64+0x100646dbc)
#8 std::__1::shared_ptr std::__1::make_shared[abi:v160006]>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool, void>(QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) shared_ptr.h:1004 (mixxx:arm64+0x100638fcc)
#9 mixxx::CoreServices::initialize(QApplication*) coreservices.cpp:264 (mixxx:arm64+0x10063735c)
#10 (anonymous namespace)::runMixxx(MixxxApplication*, CmdlineArgs const&) main.cpp:87 (mixxx:arm64+0x100010fcc)
#11 main main.cpp:243 (mixxx:arm64+0x10000ff08)
Mutex M0 (0x000132118e18) created at:
#0 pthread_mutex_init :230508612 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x30e30)
#1 HALB_Mutex::HALB_Mutex() :230508612 (CoreAudio:arm64e+0x582f70)
#2 Pa_Initialize :230508612 (mixxx:arm64+0x10210b61c)
#3 SoundManager::queryDevicesPortaudio() soundmanager.cpp:261 (mixxx:arm64+0x101176d00)
#4 SoundManager::queryDevices() soundmanager.cpp:239 (mixxx:arm64+0x1011750c4)
#5 SoundManager::SoundManager(QSharedPointer>, EngineMixer*) soundmanager.cpp:77 (mixxx:arm64+0x101174b18)
#6 SoundManager::SoundManager(QSharedPointer>, EngineMixer*) soundmanager.cpp:59 (mixxx:arm64+0x101175324)
#7 SoundManager* std::__1::construct_at[abi:v160006]>&, EngineMixer*, SoundManager*>(SoundManager*, QSharedPointer>&, EngineMixer*&&) construct_at.h:38 (mixxx:arm64+0x100648e68)
#8 void std::__1::allocator_traits>::construct[abi:v160006]>&, EngineMixer*, void, void>(std::__1::allocator&, SoundManager*, QSharedPointer>&, EngineMixer*&&) allocator_traits.h:304 (mixxx:arm64+0x100648b48)
#9 std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]>&, EngineMixer*>(std::__1::allocator, QSharedPointer>&, EngineMixer*&&) shared_ptr.h:284 (mixxx:arm64+0x1006489e4)
#10 std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]>&, EngineMixer*>(std::__1::allocator, QSharedPointer>&, EngineMixer*&&) shared_ptr.h:276 (mixxx:arm64+0x10064842c)
#11 std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], QSharedPointer>&, EngineMixer*, void>(std::__1::allocator const&, QSharedPointer>&, EngineMixer*&&) shared_ptr.h:995 (mixxx:arm64+0x100648240)
#12 std::__1::shared_ptr std::__1::make_shared[abi:v160006]>&, EngineMixer*, void>(QSharedPointer>&, EngineMixer*&&) shared_ptr.h:1004 (mixxx:arm64+0x100639118)
#13 mixxx::CoreServices::initialize(QApplication*) coreservices.cpp:274 (mixxx:arm64+0x1006373ec)
#14 (anonymous namespace)::runMixxx(MixxxApplication*, CmdlineArgs const&) main.cpp:87 (mixxx:arm64+0x100010fcc)
#15 main main.cpp:243 (mixxx:arm64+0x10000ff08)
Mutex M1 (0x000113b29b60) created at:
#0 pthread_mutex_init :230508612 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x30e30)
#1 CADeprecated::CAMutex::CAMutex(char const*) :230508612 (libAudioToolboxUtility.dylib:arm64e+0x2920c)
#2 OpenStream :230508612 (mixxx:arm64+0x102115abc)
#3 Pa_OpenStream :230508612 (mixxx:arm64+0x10210c704)
#4 SoundDevicePortAudio::open(bool, int) sounddeviceportaudio.cpp:338 (mixxx:arm64+0x10116f380)
#5 SoundManager::setupDevices() soundmanager.cpp:475 (mixxx:arm64+0x101178660)
#6 MixxxMainWindow::initialize() mixxxmainwindow.cpp:346 (mixxx:arm64+0x100f321e4)
#7 QtPrivate::FunctorCall, QtPrivate::List<>, void, void (MixxxMainWindow::*)()>::call(void (MixxxMainWindow::*)(), MixxxMainWindow*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x100f46a14)
#8 void QtPrivate::FunctionPointer::call, void>(void (MixxxMainWindow::*)(), MixxxMainWindow*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x100f468e0)
#9 QtPrivate::QSlotObject, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x100f46744)
#10 void doActivate(QObject*, int, void**) :230508612 (mixxx:arm64+0x10011ef08)
#11 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) :230508612 (mixxx:arm64+0x10011db88)
#12 WInitialGLWidget::onInitialized() moc_winitialglwidget.cpp:160 (mixxx:arm64+0x1015c2d78)
#13 WInitialGLWidget::initializeGL() winitialglwidget.cpp:17 (mixxx:arm64+0x1015c3294)
#14 OpenGLWindow::initializeGL() openglwindow.cpp:31 (mixxx:arm64+0x1015c00b8)
#15 QOpenGLWindowPrivate::initialize() :230508612 (mixxx:arm64+0x1044fcd88)
#16 QOpenGLWindow::resizeEvent(QResizeEvent*) :230508612 (mixxx:arm64+0x1044fdd78)
#17 QWindow::event(QEvent*) :230508612 (mixxx:arm64+0x104cdbd1c)
#18 QPaintDeviceWindow::event(QEvent*) :230508612 (mixxx:arm64+0x104ca4814)
#19 OpenGLWindow::event(QEvent*) openglwindow.cpp:70 (mixxx:arm64+0x1015c03fc)
#20 QApplicationPrivate::notify_helper(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fabdc)
#21 QApplication::notify(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fc184)
#22 MixxxApplication::notify(QObject*, QEvent*) mixxxapplication.cpp:200 (mixxx:arm64+0x100ef48dc)
#23 QCoreApplication::notifyInternal2(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b3dec)
#24 QCoreApplication::sendSpontaneousEvent(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b4f08)
#25 QGuiApplicationPrivate::processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent*) :230508612 (mixxx:arm64+0x104c8a1b4)
#26 QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) :230508612 (mixxx:arm64+0x104c86310)
#27 QWindowSystemInterface::sendWindowSystemEvents(QFlags) :230508612 (mixxx:arm64+0x104ce3884)
#28 QWindowSystemInterface::flushWindowSystemEvents(QFlags) :230508612 (mixxx:arm64+0x104ce3304)
#29 QCocoaWindow::handleGeometryChange() :230508612 (mixxx:arm64+0x101c7da5c)
#30 QWindow::show() :230508612 (mixxx:arm64+0x104cd2c24)
#31 QWindowContainer::event(QEvent*) :230508612 (mixxx:arm64+0x102299710)
#32 QApplicationPrivate::notify_helper(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fabdc)
#33 QApplication::notify(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fd364)
#34 MixxxApplication::notify(QObject*, QEvent*) mixxxapplication.cpp:200 (mixxx:arm64+0x100ef48dc)
#35 QCoreApplication::notifyInternal2(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b3dec)
#36 QCoreApplication::sendEvent(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b4ea8)
#37 QWidgetPrivate::show_helper() :230508612 (mixxx:arm64+0x1022741b0)
#38 QWidgetPrivate::setVisible(bool) :230508612 (mixxx:arm64+0x102275c10)
#39 QWidget::setVisible(bool) :230508612 (mixxx:arm64+0x1022753f0)
#40 QWidget::show() :230508612 (mixxx:arm64+0x102273fc8)
#41 WGLWidget::showEvent(QShowEvent*) wglwidgetqopengl.cpp:44 (mixxx:arm64+0x1015c2698)
#42 QWidget::event(QEvent*) :230508612 (mixxx:arm64+0x102276240)
#43 QApplicationPrivate::notify_helper(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fabdc)
#44 QApplication::notify(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fd364)
#45 MixxxApplication::notify(QObject*, QEvent*) mixxxapplication.cpp:200 (mixxx:arm64+0x100ef48dc)
#46 QCoreApplication::notifyInternal2(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b3dec)
#47 QCoreApplication::sendEvent(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b4ea8)
#48 QWidgetPrivate::show_helper() :230508612 (mixxx:arm64+0x1022741b0)
#49 QWidgetPrivate::setVisible(bool) :230508612 (mixxx:arm64+0x102275c10)
#50 QWidget::setVisible(bool) :230508612 (mixxx:arm64+0x1022753f0)
#51 QWidget::show() :230508612 (mixxx:arm64+0x102273fc8)
#52 MixxxMainWindow::initializeQOpenGL() mixxxmainwindow.cpp:161 (mixxx:arm64+0x100f30e64)
#53 (anonymous namespace)::runMixxx(MixxxApplication*, CmdlineArgs const&) main.cpp:92 (mixxx:arm64+0x100010fd8)
#54 main main.cpp:243 (mixxx:arm64+0x10000ff08)
Thread T71 (tid=8891322, running) created by main thread at:
#0 pthread_create :230508612 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x2ffec)
#1 HALB_IOThread::DispatchPThread(void* (*)(void*), void*) :230508612 (CoreAudio:arm64e+0x332910)
#2 Pa_StartStream :230508612 (mixxx:arm64+0x10210c97c)
#3 SoundDevicePortAudio::open(bool, int) sounddeviceportaudio.cpp:363 (mixxx:arm64+0x10116f51c)
#4 SoundManager::setupDevices() soundmanager.cpp:475 (mixxx:arm64+0x101178660)
#5 MixxxMainWindow::initialize() mixxxmainwindow.cpp:346 (mixxx:arm64+0x100f321e4)
#6 QtPrivate::FunctorCall, QtPrivate::List<>, void, void (MixxxMainWindow::*)()>::call(void (MixxxMainWindow::*)(), MixxxMainWindow*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x100f46a14)
#7 void QtPrivate::FunctionPointer::call, void>(void (MixxxMainWindow::*)(), MixxxMainWindow*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x100f468e0)
#8 QtPrivate::QSlotObject, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x100f46744)
#9 void doActivate(QObject*, int, void**) :230508612 (mixxx:arm64+0x10011ef08)
#10 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) :230508612 (mixxx:arm64+0x10011db88)
#11 WInitialGLWidget::onInitialized() moc_winitialglwidget.cpp:160 (mixxx:arm64+0x1015c2d78)
#12 WInitialGLWidget::initializeGL() winitialglwidget.cpp:17 (mixxx:arm64+0x1015c3294)
#13 OpenGLWindow::initializeGL() openglwindow.cpp:31 (mixxx:arm64+0x1015c00b8)
#14 QOpenGLWindowPrivate::initialize() :230508612 (mixxx:arm64+0x1044fcd88)
#15 QOpenGLWindow::resizeEvent(QResizeEvent*) :230508612 (mixxx:arm64+0x1044fdd78)
#16 QWindow::event(QEvent*) :230508612 (mixxx:arm64+0x104cdbd1c)
#17 QPaintDeviceWindow::event(QEvent*) :230508612 (mixxx:arm64+0x104ca4814)
#18 OpenGLWindow::event(QEvent*) openglwindow.cpp:70 (mixxx:arm64+0x1015c03fc)
#19 QApplicationPrivate::notify_helper(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fabdc)
#20 QApplication::notify(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fc184)
#21 MixxxApplication::notify(QObject*, QEvent*) mixxxapplication.cpp:200 (mixxx:arm64+0x100ef48dc)
#22 QCoreApplication::notifyInternal2(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b3dec)
#23 QCoreApplication::sendSpontaneousEvent(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b4f08)
#24 QGuiApplicationPrivate::processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent*) :230508612 (mixxx:arm64+0x104c8a1b4)
#25 QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) :230508612 (mixxx:arm64+0x104c86310)
#26 QWindowSystemInterface::sendWindowSystemEvents(QFlags) :230508612 (mixxx:arm64+0x104ce3884)
#27 QWindowSystemInterface::flushWindowSystemEvents(QFlags) :230508612 (mixxx:arm64+0x104ce3304)
#28 QCocoaWindow::handleGeometryChange() :230508612 (mixxx:arm64+0x101c7da5c)
#29 QWindow::show() :230508612 (mixxx:arm64+0x104cd2c24)
#30 QWindowContainer::event(QEvent*) :230508612 (mixxx:arm64+0x102299710)
#31 QApplicationPrivate::notify_helper(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fabdc)
#32 QApplication::notify(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fd364)
#33 MixxxApplication::notify(QObject*, QEvent*) mixxxapplication.cpp:200 (mixxx:arm64+0x100ef48dc)
#34 QCoreApplication::notifyInternal2(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b3dec)
#35 QCoreApplication::sendEvent(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b4ea8)
#36 QWidgetPrivate::show_helper() :230508612 (mixxx:arm64+0x1022741b0)
#37 QWidgetPrivate::setVisible(bool) :230508612 (mixxx:arm64+0x102275c10)
#38 QWidget::setVisible(bool) :230508612 (mixxx:arm64+0x1022753f0)
#39 QWidget::show() :230508612 (mixxx:arm64+0x102273fc8)
#40 WGLWidget::showEvent(QShowEvent*) wglwidgetqopengl.cpp:44 (mixxx:arm64+0x1015c2698)
#41 QWidget::event(QEvent*) :230508612 (mixxx:arm64+0x102276240)
#42 QApplicationPrivate::notify_helper(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fabdc)
#43 QApplication::notify(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1021fd364)
#44 MixxxApplication::notify(QObject*, QEvent*) mixxxapplication.cpp:200 (mixxx:arm64+0x100ef48dc)
#45 QCoreApplication::notifyInternal2(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b3dec)
#46 QCoreApplication::sendEvent(QObject*, QEvent*) :230508612 (mixxx:arm64+0x1000b4ea8)
#47 QWidgetPrivate::show_helper() :230508612 (mixxx:arm64+0x1022741b0)
#48 QWidgetPrivate::setVisible(bool) :230508612 (mixxx:arm64+0x102275c10)
#49 QWidget::setVisible(bool) :230508612 (mixxx:arm64+0x1022753f0)
#50 QWidget::show() :230508612 (mixxx:arm64+0x102273fc8)
#51 MixxxMainWindow::initializeQOpenGL() mixxxmainwindow.cpp:161 (mixxx:arm64+0x100f30e64)
#52 (anonymous namespace)::runMixxx(MixxxApplication*, CmdlineArgs const&) main.cpp:92 (mixxx:arm64+0x100010fd8)
#53 main main.cpp:243 (mixxx:arm64+0x10000ff08)
Thread T16 (tid=8890871, running) created by main thread at:
#0 pthread_create :230508612 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x2ffec)
#1 QThread::start(QThread::Priority) :230508612 (mixxx:arm64+0x100249b9c)
#2 EngineSideChain::EngineSideChain(QSharedPointer>, float*) enginesidechain.cpp:37 (mixxx:arm64+0x1009dc904)
#3 EngineSideChain::EngineSideChain(QSharedPointer>, float*) enginesidechain.cpp:30 (mixxx:arm64+0x1009dcb38)
#4 EngineMixer::EngineMixer(QSharedPointer>, QString const&, EffectsManager*, std::__1::shared_ptr, bool) enginemixer.cpp:168 (mixxx:arm64+0x1009a4630)
#5 EngineMixer::EngineMixer(QSharedPointer>, QString const&, EffectsManager*, std::__1::shared_ptr, bool) enginemixer.cpp:52 (mixxx:arm64+0x1009a0018)
#6 EngineMixer* std::__1::construct_at[abi:v160006]>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool, EngineMixer*>(EngineMixer*, QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) construct_at.h:38 (mixxx:arm64+0x100647ae0)
#7 void std::__1::allocator_traits>::construct[abi:v160006]>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool, void, void>(std::__1::allocator&, EngineMixer*, QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) allocator_traits.h:304 (mixxx:arm64+0x100647754)
#8 std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool>(std::__1::allocator, QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) shared_ptr.h:284 (mixxx:arm64+0x1006475c0)
#9 std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool>(std::__1::allocator, QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) shared_ptr.h:276 (mixxx:arm64+0x100646fd8)
#10 std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], QSharedPointer>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool, void>(std::__1::allocator const&, QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) shared_ptr.h:995 (mixxx:arm64+0x100646dbc)
#11 std::__1::shared_ptr std::__1::make_shared[abi:v160006]>&, char const (&) [9], EffectsManager*, std::__1::shared_ptr&, bool, void>(QSharedPointer>&, char const (&) [9], EffectsManager*&&, std::__1::shared_ptr&, bool&&) shared_ptr.h:1004 (mixxx:arm64+0x100638fcc)
#12 mixxx::CoreServices::initialize(QApplication*) coreservices.cpp:264 (mixxx:arm64+0x10063735c)
#13 (anonymous namespace)::runMixxx(MixxxApplication*, CmdlineArgs const&) main.cpp:87 (mixxx:arm64+0x100010fcc)
#14 main main.cpp:243 (mixxx:arm64+0x10000ff08)
SUMMARY: ThreadSanitizer: data race (mixxx:arm64+0x1021108e8) in PaUtil_WriteRingBuffer+0x54
```
Version
2.5
OS
No response