Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
m0dB opened this issue Nov 17, 2024 · 0 comments · May be fixed by #13897
Labels

Comments

@m0dB
Copy link
Contributor

m0dB commented Nov 17, 2024

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<double, 8, true>::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<Track>) cuecontrol.cpp:533 (mixxx:arm64+0x100902328)
    #6 EngineBuffer::notifyTrackLoaded(std::__1::shared_ptr<Track>, std::__1::shared_ptr<Track>) enginebuffer.cpp:651 (mixxx:arm64+0x100975428)
    #7 EngineBuffer::slotTrackLoaded(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double) enginebuffer.cpp:560 (mixxx:arm64+0x10096e438)
    #8 QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1, 2>, QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void, void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call(void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x10097c920)
    #9 void QtPrivate::FunctionPointer<void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call<QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>(void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x10097c764)
    #10 QtPrivate::QSlotObject<void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x10097c5c8)
    #11 void doActivate<false>(QObject*, int, void**) <null>:258918468 (mixxx:arm64+0x10010096c)
    #12 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) <null>:258918468 (mixxx:arm64+0x1000ff5ec)
    #13 CachingReader::trackLoaded(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double) moc_cachingreader.cpp:247 (mixxx:arm64+0x1008aec94)
    #14 QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1, 2>, QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void, void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call(void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x1008c0e9c)
    #15 void QtPrivate::FunctionPointer<void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call<QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>(void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x1008c0ce0)
    #16 QtPrivate::QSlotObject<void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x1008c0b44)
    #17 void doActivate<false>(QObject*, int, void**) <null>:258918468 (mixxx:arm64+0x10010096c)
    #18 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) <null>:258918468 (mixxx:arm64+0x1000ff5ec)
    #19 CachingReaderWorker::trackLoaded(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double) moc_cachingreaderworker.cpp:247 (mixxx:arm64+0x1008c815c)
    #20 CachingReaderWorker::loadTrack(std::__1::shared_ptr<Track> const&) cachingreaderworker.cpp:252 (mixxx:arm64+0x1008ca5b4)
    #21 CachingReaderWorker::run() cachingreaderworker.cpp:123 (mixxx:arm64+0x1008c970c)
    #22 QThreadPrivate::start(void*) <null>:258918468 (mixxx:arm64+0x100224e94)

  Previous read of size 8 at 0x000114a66030 by main thread (mutexes: write M2):
    #0 ControlValueAtomicBase<double, 8, true>::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() <null>:258918468 (mixxx:arm64+0x1015aa630)
    #6 non-virtual thunk to allshader::WaveformRenderMarkRange::paintGL() <null>: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::IndexesList<>, QtPrivate::List<>, void, void (WaveformWidgetFactory::*)()>::call(void (WaveformWidgetFactory::*)(), WaveformWidgetFactory*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x100f2f26c)
    #13 void QtPrivate::FunctionPointer<void (WaveformWidgetFactory::*)()>::call<QtPrivate::List<>, void>(void (WaveformWidgetFactory::*)(), WaveformWidgetFactory*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x100f2f138)
    #14 QtPrivate::QSlotObject<void (WaveformWidgetFactory::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x100f2ef9c)
    #15 QMetaCallEvent::placeMetaCall(QObject*) <null>:258918468 (mixxx:arm64+0x1000f4ee4)
    #16 QObject::event(QEvent*) <null>:258918468 (mixxx:arm64+0x1000f8000)
    #17 QApplicationPrivate::notify_helper(QObject*, QEvent*) <null>:258918468 (mixxx:arm64+0x1023ee7bc)
    #18 QApplication::notify(QObject*, QEvent*) <null>:258918468 (mixxx:arm64+0x1023efd64)
    #19 MixxxApplication::notify(QObject*, QEvent*) mixxxapplication.cpp:200 (mixxx:arm64+0x100edafb4)
    #20 QCoreApplication::notifyInternal2(QObject*, QEvent*) <null>:258918468 (mixxx:arm64+0x1000962ac)
    #21 QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) <null>:258918468 (mixxx:arm64+0x100097f8c)
    #22 QCoreApplication::sendPostedEvents(QObject*, int) <null>:258918468 (mixxx:arm64+0x10009702c)
    #23 QCocoaEventDispatcherPrivate::processPostedEvents() <null>:258918468 (mixxx:arm64+0x102df5fa0)
    #24 QCoreApplication::exec() <null>:258918468 (mixxx:arm64+0x100096f5c)
    #25 QGuiApplication::exec() <null>:258918468 (mixxx:arm64+0x102924980)
    #26 QApplication::exec() <null>: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) <null>:258918468 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x83de0)
    #1 ControlDoublePrivate::getControl(ConfigKey const&, QFlags<ControlFlag>, 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<ControlObject>::__unique_single std::__1::make_unique[abi:v160006]<ControlObject, ConfigKey>(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<ConfigObject<ConfigValue>>) cuecontrol.cpp:101 (mixxx:arm64+0x1009003dc)
    #8 EngineBuffer::EngineBuffer(QString const&, QSharedPointer<ConfigObject<ConfigValue>>, EngineChannel*, EngineMixer*) enginebuffer.cpp:228 (mixxx:arm64+0x100970990)
    #9 EngineBuffer::EngineBuffer(QString const&, QSharedPointer<ConfigObject<ConfigValue>>, EngineChannel*, EngineMixer*) enginebuffer.cpp:97 (mixxx:arm64+0x100973390)
    #10 EngineDeck::EngineDeck(ChannelHandleAndGroup const&, QSharedPointer<ConfigObject<ConfigValue>>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, bool) enginedeck.cpp:38 (mixxx:arm64+0x1008d9500)
    #11 EngineDeck::EngineDeck(ChannelHandleAndGroup const&, QSharedPointer<ConfigObject<ConfigValue>>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, bool) enginedeck.cpp:24 (mixxx:arm64+0x1008d98f8)
    #12 BaseTrackPlayerImpl::BaseTrackPlayerImpl(PlayerManager*, QSharedPointer<ConfigObject<ConfigValue>>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, ChannelHandleAndGroup const&, bool, bool, bool) basetrackplayer.cpp:55 (mixxx:arm64+0x100e90144)
    #13 BaseTrackPlayerImpl::BaseTrackPlayerImpl(PlayerManager*, QSharedPointer<ConfigObject<ConfigValue>>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, ChannelHandleAndGroup const&, bool, bool, bool) basetrackplayer.cpp:54 (mixxx:arm64+0x100e8fb94)
    #14 Deck::Deck(PlayerManager*, QSharedPointer<ConfigObject<ConfigValue>>, 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 <null>:258918468 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x4707c)
    #1 QRecursiveMutex::tryLock(int) <null>:258918468 (mixxx:arm64+0x1002264dc)
    #2 QRecursiveMutex::lock() qmutex.h:201 (mixxx:arm64+0x10090be30)
    #3 QMutexLocker<QRecursiveMutex>::QMutexLocker(QRecursiveMutex*) qmutex.h:235 (mixxx:arm64+0x10090bdb0)
    #4 QMutexLocker<QRecursiveMutex>::QMutexLocker(QRecursiveMutex*) qmutex.h:232 (mixxx:arm64+0x10090bd00)
    #5 lockMutex(QRecursiveMutex*) qmutex.h:38 (mixxx:arm64+0x1009027c4)
    #6 CueControl::trackLoaded(std::__1::shared_ptr<Track>) cuecontrol.cpp:479 (mixxx:arm64+0x100901fb8)
    #7 EngineBuffer::notifyTrackLoaded(std::__1::shared_ptr<Track>, std::__1::shared_ptr<Track>) enginebuffer.cpp:651 (mixxx:arm64+0x100975428)
    #8 EngineBuffer::slotTrackLoaded(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double) enginebuffer.cpp:560 (mixxx:arm64+0x10096e438)
    #9 QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1, 2>, QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void, void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call(void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x10097c920)
    #10 void QtPrivate::FunctionPointer<void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call<QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>(void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x10097c764)
    #11 QtPrivate::QSlotObject<void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x10097c5c8)
    #12 void doActivate<false>(QObject*, int, void**) <null>:258918468 (mixxx:arm64+0x10010096c)
    #13 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) <null>:258918468 (mixxx:arm64+0x1000ff5ec)
    #14 CachingReader::trackLoaded(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double) moc_cachingreader.cpp:247 (mixxx:arm64+0x1008aec94)
    #15 QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1, 2>, QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void, void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call(void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x1008c0e9c)
    #16 void QtPrivate::FunctionPointer<void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call<QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>(void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x1008c0ce0)
    #17 QtPrivate::QSlotObject<void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x1008c0b44)
    #18 void doActivate<false>(QObject*, int, void**) <null>:258918468 (mixxx:arm64+0x10010096c)
    #19 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) <null>:258918468 (mixxx:arm64+0x1000ff5ec)
    #20 CachingReaderWorker::trackLoaded(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double) moc_cachingreaderworker.cpp:247 (mixxx:arm64+0x1008c815c)
    #21 CachingReaderWorker::loadTrack(std::__1::shared_ptr<Track> const&) cachingreaderworker.cpp:252 (mixxx:arm64+0x1008ca5b4)
    #22 CachingReaderWorker::run() cachingreaderworker.cpp:123 (mixxx:arm64+0x1008c970c)
    #23 QThreadPrivate::start(void*) <null>:258918468 (mixxx:arm64+0x100224e94)

  Mutex M1 (0x00011cf49458) created at:
    #0 __tsan_mutex_post_lock <null>:258918468 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x4707c)
    #1 QRecursiveMutex::tryLock(int) <null>:258918468 (mixxx:arm64+0x100226500)
    #2 QRecursiveMutex::lock() qmutex.h:201 (mixxx:arm64+0x10090be30)
    #3 QMutexLocker<QRecursiveMutex>::QMutexLocker(QRecursiveMutex*) qmutex.h:235 (mixxx:arm64+0x10090bdb0)
    #4 QMutexLocker<QRecursiveMutex>::QMutexLocker(QRecursiveMutex*) qmutex.h:232 (mixxx:arm64+0x10090bd00)
    #5 lockMutex(QRecursiveMutex*) qmutex.h:38 (mixxx:arm64+0x1009027c4)
    #6 CueControl::trackLoaded(std::__1::shared_ptr<Track>) cuecontrol.cpp:479 (mixxx:arm64+0x100901fb8)
    #7 EngineBuffer::notifyTrackLoaded(std::__1::shared_ptr<Track>, std::__1::shared_ptr<Track>) enginebuffer.cpp:651 (mixxx:arm64+0x100975428)
    #8 EngineBuffer::slotTrackLoaded(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double) enginebuffer.cpp:560 (mixxx:arm64+0x10096e438)
    #9 QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1, 2>, QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void, void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call(void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x10097c920)
    #10 void QtPrivate::FunctionPointer<void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call<QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>(void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), EngineBuffer*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x10097c764)
    #11 QtPrivate::QSlotObject<void (EngineBuffer::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x10097c5c8)
    #12 void doActivate<false>(QObject*, int, void**) <null>:258918468 (mixxx:arm64+0x10010096c)
    #13 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) <null>:258918468 (mixxx:arm64+0x1000ff5ec)
    #14 CachingReader::trackLoaded(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double) moc_cachingreader.cpp:247 (mixxx:arm64+0x1008aec94)
    #15 QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1, 2>, QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void, void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call(void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:137 (mixxx:arm64+0x1008c0e9c)
    #16 void QtPrivate::FunctionPointer<void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double)>::call<QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>(void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), CachingReader*, void**) qobjectdefs_impl.h:174 (mixxx:arm64+0x1008c0ce0)
    #17 QtPrivate::QSlotObject<void (CachingReader::*)(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double), QtPrivate::List<std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) qobjectdefs_impl.h:432 (mixxx:arm64+0x1008c0b44)
    #18 void doActivate<false>(QObject*, int, void**) <null>:258918468 (mixxx:arm64+0x10010096c)
    #19 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) <null>:258918468 (mixxx:arm64+0x1000ff5ec)
    #20 CachingReaderWorker::trackLoaded(std::__1::shared_ptr<Track>, mixxx::audio::SampleRate, double) moc_cachingreaderworker.cpp:247 (mixxx:arm64+0x1008c815c)
    #21 CachingReaderWorker::loadTrack(std::__1::shared_ptr<Track> const&) cachingreaderworker.cpp:252 (mixxx:arm64+0x1008ca5b4)
    #22 CachingReaderWorker::run() cachingreaderworker.cpp:123 (mixxx:arm64+0x1008c970c)
    #23 QThreadPrivate::start(void*) <null>:258918468 (mixxx:arm64+0x100224e94)

  Mutex M2 (0x000115616468) created at:
    #0 pthread_mutex_init <null>:258918468 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x30e30)
    #1 <null> <null>: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<ConfigObject<ConfigValue>>, std::__1::shared_ptr<ChannelHandleFactory>) effectsmanager.cpp:34 (mixxx:arm64+0x10080a714)
    #13 EffectsManager::EffectsManager(QSharedPointer<ConfigObject<ConfigValue>>, std::__1::shared_ptr<ChannelHandleFactory>) effectsmanager.cpp:31 (mixxx:arm64+0x10080bbf0)
    #14 EffectsManager* std::__1::construct_at[abi:v160006]<EffectsManager, QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&, EffectsManager*>(EffectsManager*, QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&) construct_at.h:38 (mixxx:arm64+0x100628448)
    #15 void std::__1::allocator_traits<std::__1::allocator<EffectsManager>>::construct[abi:v160006]<EffectsManager, QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&, void, void>(std::__1::allocator<EffectsManager>&, EffectsManager*, QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&) allocator_traits.h:304 (mixxx:arm64+0x100628128)
    #16 std::__1::__shared_ptr_emplace<EffectsManager, std::__1::allocator<EffectsManager>>::__shared_ptr_emplace[abi:v160006]<QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&>(std::__1::allocator<EffectsManager>, QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&) shared_ptr.h:284 (mixxx:arm64+0x100627fc4)
    #17 std::__1::__shared_ptr_emplace<EffectsManager, std::__1::allocator<EffectsManager>>::__shared_ptr_emplace[abi:v160006]<QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&>(std::__1::allocator<EffectsManager>, QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&) shared_ptr.h:276 (mixxx:arm64+0x100627a0c)
    #18 std::__1::shared_ptr<EffectsManager> std::__1::allocate_shared[abi:v160006]<EffectsManager, std::__1::allocator<EffectsManager>, QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&, void>(std::__1::allocator<EffectsManager> const&, QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&) shared_ptr.h:995 (mixxx:arm64+0x100627820)
    #19 std::__1::shared_ptr<EffectsManager> std::__1::make_shared[abi:v160006]<EffectsManager, QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&, void>(QSharedPointer<ConfigObject<ConfigValue>>&, std::__1::shared_ptr<ChannelHandleFactory>&) 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 <null>:258918468 (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x2ffec)
    #1 QThread::start(QThread::Priority) <null>:258918468 (mixxx:arm64+0x100225ad0)
    #2 CachingReader::CachingReader(QString const&, QSharedPointer<ConfigObject<ConfigValue>>) cachingreader.cpp:88 (mixxx:arm64+0x1008af54c)
    #3 CachingReader::CachingReader(QString const&, QSharedPointer<ConfigObject<ConfigValue>>) cachingreader.cpp:61 (mixxx:arm64+0x1008b02c4)
    #4 EngineBuffer::EngineBuffer(QString const&, QSharedPointer<ConfigObject<ConfigValue>>, EngineChannel*, EngineMixer*) enginebuffer.cpp:106 (mixxx:arm64+0x10096f2e4)
    #5 EngineBuffer::EngineBuffer(QString const&, QSharedPointer<ConfigObject<ConfigValue>>, EngineChannel*, EngineMixer*) enginebuffer.cpp:97 (mixxx:arm64+0x100973390)
    #6 EngineDeck::EngineDeck(ChannelHandleAndGroup const&, QSharedPointer<ConfigObject<ConfigValue>>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, bool) enginedeck.cpp:38 (mixxx:arm64+0x1008d9500)
    #7 EngineDeck::EngineDeck(ChannelHandleAndGroup const&, QSharedPointer<ConfigObject<ConfigValue>>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, bool) enginedeck.cpp:24 (mixxx:arm64+0x1008d98f8)
    #8 BaseTrackPlayerImpl::BaseTrackPlayerImpl(PlayerManager*, QSharedPointer<ConfigObject<ConfigValue>>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, ChannelHandleAndGroup const&, bool, bool, bool) basetrackplayer.cpp:55 (mixxx:arm64+0x100e90144)
    #9 BaseTrackPlayerImpl::BaseTrackPlayerImpl(PlayerManager*, QSharedPointer<ConfigObject<ConfigValue>>, EngineMixer*, EffectsManager*, EngineChannel::ChannelOrientation, ChannelHandleAndGroup const&, bool, bool, bool) basetrackplayer.cpp:54 (mixxx:arm64+0x100e8fb94)
    #10 Deck::Deck(PlayerManager*, QSharedPointer<ConfigObject<ConfigValue>>, 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<double, 8, true>::setValue(double const&)

Version

No response

OS

No response

@m0dB m0dB added the bug label Nov 17, 2024
@m0dB m0dB linked a pull request Nov 17, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant