mixxxdj / mixxx

Mixxx is Free DJ software that gives you everything you need to perform live mixes.
http://mixxx.org
Other
4.53k stars 1.28k forks source link

ThreadSanitizer: data race controlvalue.h:138 in ControlValueAtomicBase<double, 8, true>::setValue(double const&) #13895

Open m0dB opened 5 days ago

m0dB commented 5 days ago

Bug Description

Details

``` ================== WARNING: ThreadSanitizer: data race (pid=29271) Write of size 8 at 0x000114a66030 by thread T19 (mutexes: write M0, write M1): #0 ControlValueAtomicBase::setValue(double const&) controlvalue.h:138 (mixxx:arm64+0x1003e6884) #1 ControlDoublePrivate::setInner(double, QObject*) control.cpp:297 (mixxx:arm64+0x1003ea8c4) #2 ControlDoublePrivate::set(double, QObject*) control.cpp:285 (mixxx:arm64+0x1003ea64c) #3 ControlObject::set(double) controlobject.h:99 (mixxx:arm64+0x1003fb5d4) #4 CueControl::loadCuesFromTrack() cuecontrol.cpp:697 (mixxx:arm64+0x1009031a0) #5 CueControl::trackLoaded(std::__1::shared_ptr) cuecontrol.cpp:533 (mixxx:arm64+0x100902328) #6 EngineBuffer::notifyTrackLoaded(std::__1::shared_ptr, std::__1::shared_ptr) enginebuffer.cpp:651 (mixxx:arm64+0x100975428) #7 EngineBuffer::slotTrackLoaded(std::__1::shared_ptr, mixxx::audio::SampleRate, double) enginebuffer.cpp:560 (mixxx:arm64+0x10096e438) #8 QtPrivate::FunctorCall, QtPrivate::List, mixxx::audio::SampleRate, double>, void, void (EngineBuffer::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double)>::call(void (EngineBuffer::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x10097c920) #9 void QtPrivate::FunctionPointer, mixxx::audio::SampleRate, double)>::call, mixxx::audio::SampleRate, double>, void>(void (EngineBuffer::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x10097c764) #10 QtPrivate::QSlotObject, mixxx::audio::SampleRate, double), QtPrivate::List, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x10097c5c8) #11 void doActivate(QObject*, int, void**) :258918468 (mixxx:arm64+0x10010096c) #12 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) :258918468 (mixxx:arm64+0x1000ff5ec) #13 CachingReader::trackLoaded(std::__1::shared_ptr, mixxx::audio::SampleRate, double) moc_cachingreader.cpp:247 (mixxx:arm64+0x1008aec94) #14 QtPrivate::FunctorCall, QtPrivate::List, mixxx::audio::SampleRate, double>, void, void (CachingReader::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double)>::call(void (CachingReader::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x1008c0e9c) #15 void QtPrivate::FunctionPointer, mixxx::audio::SampleRate, double)>::call, mixxx::audio::SampleRate, double>, void>(void (CachingReader::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x1008c0ce0) #16 QtPrivate::QSlotObject, mixxx::audio::SampleRate, double), QtPrivate::List, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x1008c0b44) #17 void doActivate(QObject*, int, void**) :258918468 (mixxx:arm64+0x10010096c) #18 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) :258918468 (mixxx:arm64+0x1000ff5ec) #19 CachingReaderWorker::trackLoaded(std::__1::shared_ptr, mixxx::audio::SampleRate, double) moc_cachingreaderworker.cpp:247 (mixxx:arm64+0x1008c815c) #20 CachingReaderWorker::loadTrack(std::__1::shared_ptr const&) cachingreaderworker.cpp:252 (mixxx:arm64+0x1008ca5b4) #21 CachingReaderWorker::run() cachingreaderworker.cpp:123 (mixxx:arm64+0x1008c970c) #22 QThreadPrivate::start(void*) :258918468 (mixxx:arm64+0x100224e94) Previous read of size 8 at 0x000114a66030 by main thread (mutexes: write M2): #0 ControlValueAtomicBase::getValue() const controlvalue.h:130 (mixxx:arm64+0x1003e7374) #1 ControlDoublePrivate::get() const control.h:98 (mixxx:arm64+0x1003e780c) #2 ControlProxy::get() const controlproxy.h:113 (mixxx:arm64+0x100405658) #3 WaveformMarkRange::start() const waveformmarkrange.cpp:99 (mixxx:arm64+0x10137009c) #4 WaveformMarkRange::active() const waveformmarkrange.cpp:79 (mixxx:arm64+0x10136ff70) #5 allshader::WaveformRenderMarkRange::paintGL() :258918468 (mixxx:arm64+0x1015aa630) #6 non-virtual thunk to allshader::WaveformRenderMarkRange::paintGL() :258918468 (mixxx:arm64+0x1015aa920) #7 allshader::WaveformWidget::paintGL() waveformwidget.cpp:43 (mixxx:arm64+0x1015afef4) #8 allshader::WaveformWidget::render() waveformwidget.cpp:27 (mixxx:arm64+0x1015afcd8) #9 non-virtual thunk to allshader::WaveformWidget::render() waveformwidget.cpp (mixxx:arm64+0x1015afd54) #10 WaveformWidgetFactory::renderSelf() waveformwidgetfactory.cpp:798 (mixxx:arm64+0x1013d0d18) #11 WaveformWidgetFactory::swapAndRender() waveformwidgetfactory.cpp:885 (mixxx:arm64+0x1013c8378) #12 QtPrivate::FunctorCall, QtPrivate::List<>, void, void (WaveformWidgetFactory::*)()>::call(void (WaveformWidgetFactory::*)(), WaveformWidgetFactory*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x100f2f26c) #13 void QtPrivate::FunctionPointer::call, void>(void (WaveformWidgetFactory::*)(), WaveformWidgetFactory*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x100f2f138) #14 QtPrivate::QSlotObject, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x100f2ef9c) #15 QMetaCallEvent::placeMetaCall(QObject*) :258918468 (mixxx:arm64+0x1000f4ee4) #16 QObject::event(QEvent*) :258918468 (mixxx:arm64+0x1000f8000) #17 QApplicationPrivate::notify_helper(QObject*, QEvent*) :258918468 (mixxx:arm64+0x1023ee7bc) #18 QApplication::notify(QObject*, QEvent*) :258918468 (mixxx:arm64+0x1023efd64) #19 MixxxApplication::notify(QObject*, QEvent*) mixxxapplication.cpp:200 (mixxx:arm64+0x100edafb4) #20 QCoreApplication::notifyInternal2(QObject*, QEvent*) :258918468 (mixxx:arm64+0x1000962ac) #21 QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) :258918468 (mixxx:arm64+0x100097f8c) #22 QCoreApplication::sendPostedEvents(QObject*, int) :258918468 (mixxx:arm64+0x10009702c) #23 QCocoaEventDispatcherPrivate::processPostedEvents() :258918468 (mixxx:arm64+0x102df5fa0) #24 QCoreApplication::exec() :258918468 (mixxx:arm64+0x100096f5c) #25 QGuiApplication::exec() :258918468 (mixxx:arm64+0x102924980) #26 QApplication::exec() :258918468 (mixxx:arm64+0x1023efa98) #27 (anonymous namespace)::runMixxx(MixxxApplication*, CmdlineArgs const&) main.cpp:108 (mixxx:arm64+0x100010754) #28 main main.cpp:243 (mixxx:arm64+0x10000f5f0) Location is heap block of size 208 at 0x000114a65f80 allocated by main thread: #0 operator new(unsigned long) :258918468 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x83de0) #1 ControlDoublePrivate::getControl(ConfigKey const&, QFlags, ControlObject*, bool, bool, bool, double) control.cpp:188 (mixxx:arm64+0x1003e8bc4) #2 ControlObject::ControlObject(ConfigKey const&, bool, bool, bool, double) controlobject.cpp:20 (mixxx:arm64+0x10040c5f4) #3 ControlObject::ControlObject(ConfigKey const&, bool, bool, bool, double) controlobject.cpp:17 (mixxx:arm64+0x10040c9fc) #4 std::__1::__unique_if::__unique_single std::__1::make_unique[abi:v160006](ConfigKey&&) unique_ptr.h:686 (mixxx:arm64+0x1004086b4) #5 CueControl::createControls() cuecontrol.cpp:159 (mixxx:arm64+0x1008fbf84) #6 CueControl::createControls() cuecontrol.cpp:139 (mixxx:arm64+0x1008fb690) #7 CueControl::CueControl(QString const&, QSharedPointer>) cuecontrol.cpp:101 (mixxx:arm64+0x1009003dc) #8 EngineBuffer::EngineBuffer(QString const&, QSharedPointer>, EngineChannel*, EngineMixer*) enginebuffer.cpp:228 (mixxx:arm64+0x100970990) #9 EngineBuffer::EngineBuffer(QString const&, QSharedPointer>, EngineChannel*, EngineMixer*) enginebuffer.cpp:97 (mixxx:arm64+0x100973390) #10 EngineDeck::EngineDeck(ChannelHandleAndGroup const&, QSharedPointer>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, bool) enginedeck.cpp:38 (mixxx:arm64+0x1008d9500) #11 EngineDeck::EngineDeck(ChannelHandleAndGroup const&, QSharedPointer>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, bool) enginedeck.cpp:24 (mixxx:arm64+0x1008d98f8) #12 BaseTrackPlayerImpl::BaseTrackPlayerImpl(PlayerManager*, QSharedPointer>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, ChannelHandleAndGroup const&, bool, bool, bool) basetrackplayer.cpp:55 (mixxx:arm64+0x100e90144) #13 BaseTrackPlayerImpl::BaseTrackPlayerImpl(PlayerManager*, QSharedPointer>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, ChannelHandleAndGroup const&, bool, bool, bool) basetrackplayer.cpp:54 (mixxx:arm64+0x100e8fb94) #14 Deck::Deck(PlayerManager*, QSharedPointer>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, ChannelHandleAndGroup const&) deck.cpp:19 (mixxx:arm64+0x100e9f2cc) #15 PlayerManager::addDeckInner() playermanager.cpp:408 (mixxx:arm64+0x100eb73a8) #16 PlayerManager::slotChangeNumDecks(double) playermanager.cpp:323 (mixxx:arm64+0x100eb1450) #17 PlayerManager::addConfiguredDecks() playermanager.cpp:395 (mixxx:arm64+0x100eb8508) #18 mixxx::CoreServices::initialize(QApplication*) coreservices.cpp:309 (mixxx:arm64+0x100619a58) #19 (anonymous namespace)::runMixxx(MixxxApplication*, CmdlineArgs const&) main.cpp:87 (mixxx:arm64+0x1000105f4) #20 main main.cpp:243 (mixxx:arm64+0x10000f5f0) Mutex M0 (0x00011cf49468) created at: #0 __tsan_mutex_post_lock :258918468 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x4707c) #1 QRecursiveMutex::tryLock(int) :258918468 (mixxx:arm64+0x1002264dc) #2 QRecursiveMutex::lock() qmutex.h:201 (mixxx:arm64+0x10090be30) #3 QMutexLocker::QMutexLocker(QRecursiveMutex*) qmutex.h:235 (mixxx:arm64+0x10090bdb0) #4 QMutexLocker::QMutexLocker(QRecursiveMutex*) qmutex.h:232 (mixxx:arm64+0x10090bd00) #5 lockMutex(QRecursiveMutex*) qmutex.h:38 (mixxx:arm64+0x1009027c4) #6 CueControl::trackLoaded(std::__1::shared_ptr) cuecontrol.cpp:479 (mixxx:arm64+0x100901fb8) #7 EngineBuffer::notifyTrackLoaded(std::__1::shared_ptr, std::__1::shared_ptr) enginebuffer.cpp:651 (mixxx:arm64+0x100975428) #8 EngineBuffer::slotTrackLoaded(std::__1::shared_ptr, mixxx::audio::SampleRate, double) enginebuffer.cpp:560 (mixxx:arm64+0x10096e438) #9 QtPrivate::FunctorCall, QtPrivate::List, mixxx::audio::SampleRate, double>, void, void (EngineBuffer::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double)>::call(void (EngineBuffer::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x10097c920) #10 void QtPrivate::FunctionPointer, mixxx::audio::SampleRate, double)>::call, mixxx::audio::SampleRate, double>, void>(void (EngineBuffer::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x10097c764) #11 QtPrivate::QSlotObject, mixxx::audio::SampleRate, double), QtPrivate::List, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x10097c5c8) #12 void doActivate(QObject*, int, void**) :258918468 (mixxx:arm64+0x10010096c) #13 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) :258918468 (mixxx:arm64+0x1000ff5ec) #14 CachingReader::trackLoaded(std::__1::shared_ptr, mixxx::audio::SampleRate, double) moc_cachingreader.cpp:247 (mixxx:arm64+0x1008aec94) #15 QtPrivate::FunctorCall, QtPrivate::List, mixxx::audio::SampleRate, double>, void, void (CachingReader::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double)>::call(void (CachingReader::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x1008c0e9c) #16 void QtPrivate::FunctionPointer, mixxx::audio::SampleRate, double)>::call, mixxx::audio::SampleRate, double>, void>(void (CachingReader::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x1008c0ce0) #17 QtPrivate::QSlotObject, mixxx::audio::SampleRate, double), QtPrivate::List, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x1008c0b44) #18 void doActivate(QObject*, int, void**) :258918468 (mixxx:arm64+0x10010096c) #19 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) :258918468 (mixxx:arm64+0x1000ff5ec) #20 CachingReaderWorker::trackLoaded(std::__1::shared_ptr, mixxx::audio::SampleRate, double) moc_cachingreaderworker.cpp:247 (mixxx:arm64+0x1008c815c) #21 CachingReaderWorker::loadTrack(std::__1::shared_ptr const&) cachingreaderworker.cpp:252 (mixxx:arm64+0x1008ca5b4) #22 CachingReaderWorker::run() cachingreaderworker.cpp:123 (mixxx:arm64+0x1008c970c) #23 QThreadPrivate::start(void*) :258918468 (mixxx:arm64+0x100224e94) Mutex M1 (0x00011cf49458) created at: #0 __tsan_mutex_post_lock :258918468 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x4707c) #1 QRecursiveMutex::tryLock(int) :258918468 (mixxx:arm64+0x100226500) #2 QRecursiveMutex::lock() qmutex.h:201 (mixxx:arm64+0x10090be30) #3 QMutexLocker::QMutexLocker(QRecursiveMutex*) qmutex.h:235 (mixxx:arm64+0x10090bdb0) #4 QMutexLocker::QMutexLocker(QRecursiveMutex*) qmutex.h:232 (mixxx:arm64+0x10090bd00) #5 lockMutex(QRecursiveMutex*) qmutex.h:38 (mixxx:arm64+0x1009027c4) #6 CueControl::trackLoaded(std::__1::shared_ptr) cuecontrol.cpp:479 (mixxx:arm64+0x100901fb8) #7 EngineBuffer::notifyTrackLoaded(std::__1::shared_ptr, std::__1::shared_ptr) enginebuffer.cpp:651 (mixxx:arm64+0x100975428) #8 EngineBuffer::slotTrackLoaded(std::__1::shared_ptr, mixxx::audio::SampleRate, double) enginebuffer.cpp:560 (mixxx:arm64+0x10096e438) #9 QtPrivate::FunctorCall, QtPrivate::List, mixxx::audio::SampleRate, double>, void, void (EngineBuffer::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double)>::call(void (EngineBuffer::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x10097c920) #10 void QtPrivate::FunctionPointer, mixxx::audio::SampleRate, double)>::call, mixxx::audio::SampleRate, double>, void>(void (EngineBuffer::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x10097c764) #11 QtPrivate::QSlotObject, mixxx::audio::SampleRate, double), QtPrivate::List, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x10097c5c8) #12 void doActivate(QObject*, int, void**) :258918468 (mixxx:arm64+0x10010096c) #13 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) :258918468 (mixxx:arm64+0x1000ff5ec) #14 CachingReader::trackLoaded(std::__1::shared_ptr, mixxx::audio::SampleRate, double) moc_cachingreader.cpp:247 (mixxx:arm64+0x1008aec94) #15 QtPrivate::FunctorCall, QtPrivate::List, mixxx::audio::SampleRate, double>, void, void (CachingReader::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double)>::call(void (CachingReader::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x1008c0e9c) #16 void QtPrivate::FunctionPointer, mixxx::audio::SampleRate, double)>::call, mixxx::audio::SampleRate, double>, void>(void (CachingReader::*)(std::__1::shared_ptr, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x1008c0ce0) #17 QtPrivate::QSlotObject, mixxx::audio::SampleRate, double), QtPrivate::List, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x1008c0b44) #18 void doActivate(QObject*, int, void**) :258918468 (mixxx:arm64+0x10010096c) #19 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) :258918468 (mixxx:arm64+0x1000ff5ec) #20 CachingReaderWorker::trackLoaded(std::__1::shared_ptr, mixxx::audio::SampleRate, double) moc_cachingreaderworker.cpp:247 (mixxx:arm64+0x1008c815c) #21 CachingReaderWorker::loadTrack(std::__1::shared_ptr const&) cachingreaderworker.cpp:252 (mixxx:arm64+0x1008ca5b4) #22 CachingReaderWorker::run() cachingreaderworker.cpp:123 (mixxx:arm64+0x1008c970c) #23 QThreadPrivate::start(void*) :258918468 (mixxx:arm64+0x100224e94) Mutex M2 (0x000115616468) created at: #0 pthread_mutex_init :258918468 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x30e30) #1 :258918468 (CoreAudio:arm64e+0x7041c) #2 AudioUnitManager::AudioUnitManager(AVAudioUnitComponent*, AudioUnitInstantiationType) audiounitmanager.mm:22 (mixxx:arm64+0x1015ca5b4) #3 AudioUnitManager::AudioUnitManager(AVAudioUnitComponent*, AudioUnitInstantiationType) audiounitmanager.mm:11 (mixxx:arm64+0x1015caa84) #4 AudioUnitManifest::AudioUnitManifest(QString const&, AVAudioUnitComponent*) audiounitmanifest.mm:23 (mixxx:arm64+0x1015d19b4) #5 AudioUnitManifest::AudioUnitManifest(QString const&, AVAudioUnitComponent*) audiounitmanifest.mm:12 (mixxx:arm64+0x1015d227c) #6 AudioUnitBackend::loadAudioUnits() audiounitbackend.mm:102 (mixxx:arm64+0x1015c0494) #7 AudioUnitBackend::AudioUnitBackend() audiounitbackend.mm:22 (mixxx:arm64+0x1015bff58) #8 AudioUnitBackend::AudioUnitBackend() audiounitbackend.mm:21 (mixxx:arm64+0x1015bfe10) #9 createAudioUnitBackend() audiounitbackend.mm:111 (mixxx:arm64+0x1015bfd68) #10 EffectsBackendManager::EffectsBackendManager() effectsbackendmanager.cpp:22 (mixxx:arm64+0x1007aece4) #11 EffectsBackendManager::EffectsBackendManager() effectsbackendmanager.cpp:15 (mixxx:arm64+0x1007af410) #12 EffectsManager::EffectsManager(QSharedPointer>, std::__1::shared_ptr) effectsmanager.cpp:34 (mixxx:arm64+0x10080a714) #13 EffectsManager::EffectsManager(QSharedPointer>, std::__1::shared_ptr) effectsmanager.cpp:31 (mixxx:arm64+0x10080bbf0) #14 EffectsManager* std::__1::construct_at[abi:v160006]>&, std::__1::shared_ptr&, EffectsManager*>(EffectsManager*, QSharedPointer>&, std::__1::shared_ptr&) construct_at.h:38 (mixxx:arm64+0x100628448) #15 void std::__1::allocator_traits>::construct[abi:v160006]>&, std::__1::shared_ptr&, void, void>(std::__1::allocator&, EffectsManager*, QSharedPointer>&, std::__1::shared_ptr&) allocator_traits.h:304 (mixxx:arm64+0x100628128) #16 std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]>&, std::__1::shared_ptr&>(std::__1::allocator, QSharedPointer>&, std::__1::shared_ptr&) shared_ptr.h:284 (mixxx:arm64+0x100627fc4) #17 std::__1::__shared_ptr_emplace>::__shared_ptr_emplace[abi:v160006]>&, std::__1::shared_ptr&>(std::__1::allocator, QSharedPointer>&, std::__1::shared_ptr&) shared_ptr.h:276 (mixxx:arm64+0x100627a0c) #18 std::__1::shared_ptr std::__1::allocate_shared[abi:v160006], QSharedPointer>&, std::__1::shared_ptr&, void>(std::__1::allocator const&, QSharedPointer>&, std::__1::shared_ptr&) shared_ptr.h:995 (mixxx:arm64+0x100627820) #19 std::__1::shared_ptr std::__1::make_shared[abi:v160006]>&, std::__1::shared_ptr&, void>(QSharedPointer>&, std::__1::shared_ptr&) shared_ptr.h:1004 (mixxx:arm64+0x10061b188) #20 mixxx::CoreServices::initialize(QApplication*) coreservices.cpp:262 (mixxx:arm64+0x1006195c4) #21 (anonymous namespace)::runMixxx(MixxxApplication*, CmdlineArgs const&) main.cpp:87 (mixxx:arm64+0x1000105f4) #22 main main.cpp:243 (mixxx:arm64+0x10000f5f0) Thread T19 (tid=16281635, running) created by main thread at: #0 pthread_create :258918468 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x2ffec) #1 QThread::start(QThread::Priority) :258918468 (mixxx:arm64+0x100225ad0) #2 CachingReader::CachingReader(QString const&, QSharedPointer>) cachingreader.cpp:88 (mixxx:arm64+0x1008af54c) #3 CachingReader::CachingReader(QString const&, QSharedPointer>) cachingreader.cpp:61 (mixxx:arm64+0x1008b02c4) #4 EngineBuffer::EngineBuffer(QString const&, QSharedPointer>, EngineChannel*, EngineMixer*) enginebuffer.cpp:106 (mixxx:arm64+0x10096f2e4) #5 EngineBuffer::EngineBuffer(QString const&, QSharedPointer>, EngineChannel*, EngineMixer*) enginebuffer.cpp:97 (mixxx:arm64+0x100973390) #6 EngineDeck::EngineDeck(ChannelHandleAndGroup const&, QSharedPointer>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, bool) enginedeck.cpp:38 (mixxx:arm64+0x1008d9500) #7 EngineDeck::EngineDeck(ChannelHandleAndGroup const&, QSharedPointer>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, bool) enginedeck.cpp:24 (mixxx:arm64+0x1008d98f8) #8 BaseTrackPlayerImpl::BaseTrackPlayerImpl(PlayerManager*, QSharedPointer>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, ChannelHandleAndGroup const&, bool, bool, bool) basetrackplayer.cpp:55 (mixxx:arm64+0x100e90144) #9 BaseTrackPlayerImpl::BaseTrackPlayerImpl(PlayerManager*, QSharedPointer>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, ChannelHandleAndGroup const&, bool, bool, bool) basetrackplayer.cpp:54 (mixxx:arm64+0x100e8fb94) #10 Deck::Deck(PlayerManager*, QSharedPointer>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, ChannelHandleAndGroup const&) deck.cpp:19 (mixxx:arm64+0x100e9f2cc) #11 PlayerManager::addDeckInner() playermanager.cpp:408 (mixxx:arm64+0x100eb73a8) #12 PlayerManager::slotChangeNumDecks(double) playermanager.cpp:323 (mixxx:arm64+0x100eb1450) #13 PlayerManager::addConfiguredDecks() playermanager.cpp:395 (mixxx:arm64+0x100eb8508) #14 mixxx::CoreServices::initialize(QApplication*) coreservices.cpp:309 (mixxx:arm64+0x100619a58) #15 (anonymous namespace)::runMixxx(MixxxApplication*, CmdlineArgs const&) main.cpp:87 (mixxx:arm64+0x1000105f4) #16 main main.cpp:243 (mixxx:arm64+0x10000f5f0) SUMMARY: ThreadSanitizer: data race controlvalue.h:138 in ControlValueAtomicBase::setValue(double const&) ```

Version

No response

OS

No response