Skip to content

Data race in tckglobal #3286

@daljit46

Description

@daljit46

Despite our efforts in #3172, it seems that we still have data races when running tckglobal. Here is a report of the latest weekly sanitisers run:

WARNING: ThreadSanitizer: data race (pid=52079)
  Write of size 4 at 0x72c4000141ac by thread T8:
    #0 void MR::Raw::store_native<float>(float, void*, unsigned long) /home/runner/work/mrtrix3/mrtrix3/cpp/core/raw.h:180:26 (libmrtrix-core.so+0x4742b8) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #1 MR::Image<float>::set_value(float) /home/runner/work/mrtrix3/mrtrix3/cpp/core/image.h:97:7 (libmrtrix-core.so+0x4742b8)
    #2 MR::Helper::Value<MR::Image<float>>::set(float) /home/runner/work/mrtrix3/mrtrix3/cpp/core/image_helpers.h:511:11 (libmrtrix-core.so+0x4742b8)
    #3 MR::Helper::Value<MR::Image<float>>::operator=(float) /home/runner/work/mrtrix3/mrtrix3/cpp/core/image_helpers.h:493:64 (libmrtrix-core.so+0x4742b8)
    #4 void MR::Helper::Row<MR::Image<float>>::operator=<Eigen::Matrix<double, -1, 1, 0, -1, 1>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1>> const&) /home/runner/work/mrtrix3/mrtrix3/cpp/core/image_helpers.h:556:3 (libmrtrix-core.so+0x4742b8)
    #5 MR::DWI::Tractography::GT::ExternalEnergyComputer::acceptChanges() /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/externalenergy.cpp:141:16 (libmrtrix-core.so+0x4742b8)
    #6 MR::DWI::Tractography::GT::EnergySumComputer::acceptChanges() /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/energy.h:78:10 (tckglobal+0x11047c) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #7 MR::DWI::Tractography::GT::MHSampler::randshift() /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/mhsampler.cpp:118:8 (libmrtrix-core.so+0x49d0ab) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #8 MR::DWI::Tractography::GT::MHSampler::next() /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/mhsampler.cpp:41:12 (libmrtrix-core.so+0x49bcba) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #9 MR::DWI::Tractography::GT::MHSampler::execute() /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/mhsampler.cpp:27:5 (libmrtrix-core.so+0x49ba67) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #10 void std::__invoke_impl<void, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::__invoke_memfun_deref, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:74:14 (tckglobal+0x119153) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #11 std::__invoke_result<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>::type std::__invoke<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:96:14 (tckglobal+0x119153)
    #12 void std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_thread.h:301:13 (tckglobal+0x119153)
    #13 std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_thread.h:308:11 (tckglobal+0x119153)
    #14 std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/future:1439:6 (tckglobal+0x119153)
    #15 std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter> std::__invoke_impl<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>&>(std::__invoke_other, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:61:14 (tckglobal+0x11904e) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #16 std::enable_if<is_invocable_r_v<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>&>, std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>>::type std::__invoke_r<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>&>(std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:114:9 (tckglobal+0x11904e)
    #17 std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>>::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:290:9 (tckglobal+0x11904e)
    #18 std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:591:9 (tckglobal+0x118ed0) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #19 std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/future:596:27 (tckglobal+0x118ed0)
    #20 void std::__invoke_impl<void, void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::__invoke_memfun_deref, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:74:14 (tckglobal+0x11900b) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #21 std::__invoke_result<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>::type std::__invoke<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:96:14 (tckglobal+0x11900b)
    #22 void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&)::'lambda'()::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/mutex:909:4 (tckglobal+0x11900b)
    #23 std::once_flag::_Prepare_execution::_Prepare_execution<void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&)::'lambda'()>(void (std::__future_base::_State_baseV2::*&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*))::'lambda'()::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/mutex:845:21 (tckglobal+0x11900b)
    #24 std::once_flag::_Prepare_execution::_Prepare_execution<void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&)::'lambda'()>(void (std::__future_base::_State_baseV2::*&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*))::'lambda'()::__invoke() /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/mutex:845:16 (tckglobal+0x11900b)
    #25 pthread_once <null> (tckglobal+0x6eaad) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #26 __gthread_once(int*, void (*)()) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/x86_64-linux-gnu/c++/14/bits/gthr-default.h:713:12 (tckglobal+0x118c36) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #27 void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/mutex:916:21 (tckglobal+0x118c36)
    #28 std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/future:435:2 (tckglobal+0x118c36)
    #29 std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/future:1781:6 (tckglobal+0x11848b) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #30 void std::__invoke_impl<void, void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>(std::__invoke_memfun_deref, void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*&&)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:74:14 (tckglobal+0x119547) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #31 std::__invoke_result<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>::type std::__invoke<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>(void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*&&)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:96:14 (tckglobal+0x119547)
    #32 void std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_thread.h:301:13 (tckglobal+0x119547)
    #33 std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>>::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_thread.h:308:11 (tckglobal+0x119547)
    #34 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>>>::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_thread.h:253:13 (tckglobal+0x119547)
    #35 <null> <null> (libstdc++.so.6+0xecdb3) (BuildId: 753c6c8608b61d4e67be8f0c890e03e0aa046b8b)

  Previous read of size 4 at 0x72c4000141ac by thread T7:
    #0 float MR::Raw::fetch_native<float>(void const*, unsigned long) /home/runner/work/mrtrix3/mrtrix3/cpp/core/raw.h:159:10 (libmrtrix-core.so+0x47f148) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #1 MR::Image<float>::get_value() const /home/runner/work/mrtrix3/mrtrix3/cpp/core/image.h:91:14 (libmrtrix-core.so+0x47f148)
    #2 MR::Helper::Value<MR::Image<float>>::get() const /home/runner/work/mrtrix3/mrtrix3/cpp/core/image_helpers.h:509:54 (libmrtrix-core.so+0x47f148)
    #3 MR::Helper::Value<MR::Image<float>>::operator float() const /home/runner/work/mrtrix3/mrtrix3/cpp/core/image_helpers.h:492:53 (libmrtrix-core.so+0x47f148)
    #4 Eigen::Matrix<double, -1, 1, 0, -1, 1>& Eigen::MatrixBase<Eigen::Matrix<double, -1, 1, 0, -1, 1>>::operator+=<MR::Image<float>>(MR::Helper::ConstRow<MR::Image<float>> const&) /home/runner/work/mrtrix3/mrtrix3/cpp/core/eigen_plugins/dense_base.h:27:1 (libmrtrix-core.so+0x47f148)
    #5 MR::DWI::Tractography::GT::ExternalEnergyComputer::add2vox(Eigen::Matrix<int, 3, 1, 0, 3, 1> const&, double) /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/externalenergy.cpp:199:5 (libmrtrix-core.so+0x47608d) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #6 MR::DWI::Tractography::GT::ExternalEnergyComputer::add(Eigen::Matrix<float, 3, 1, 0, 3, 1> const&, Eigen::Matrix<float, 3, 1, 0, 3, 1> const&, double) /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/externalenergy.cpp:170:3 (libmrtrix-core.so+0x4752fa) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #7 MR::DWI::Tractography::GT::ExternalEnergyComputer::stageRemove(MR::DWI::Tractography::GT::Particle const*) /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/externalenergy.h:52:5 (libmrtrix-core.so+0x482be2) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #8 MR::DWI::Tractography::GT::EnergySumComputer::stageRemove(MR::DWI::Tractography::GT::Particle const*) /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/energy.h:68:91 (tckglobal+0x11030a) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #9 MR::DWI::Tractography::GT::MHSampler::death() /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/mhsampler.cpp:86:18 (libmrtrix-core.so+0x49c650) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #10 MR::DWI::Tractography::GT::MHSampler::next() /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/mhsampler.cpp:38:12 (libmrtrix-core.so+0x49bc8b) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #11 MR::DWI::Tractography::GT::MHSampler::execute() /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/mhsampler.cpp:27:5 (libmrtrix-core.so+0x49ba67) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #12 void std::__invoke_impl<void, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::__invoke_memfun_deref, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:74:14 (tckglobal+0x119153) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #13 std::__invoke_result<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>::type std::__invoke<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:96:14 (tckglobal+0x119153)
    #14 void std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_thread.h:301:13 (tckglobal+0x119153)
    #15 std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_thread.h:308:11 (tckglobal+0x119153)
    #16 std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/future:1439:6 (tckglobal+0x119153)
    #17 std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter> std::__invoke_impl<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>&>(std::__invoke_other, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:61:14 (tckglobal+0x11904e) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #18 std::enable_if<is_invocable_r_v<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>&>, std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>>::type std::__invoke_r<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>&>(std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:114:9 (tckglobal+0x11904e)
    #19 std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>>::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:290:9 (tckglobal+0x11904e)
    #20 std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:591:9 (tckglobal+0x118ed0) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #21 std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/future:596:27 (tckglobal+0x118ed0)
    #22 void std::__invoke_impl<void, void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::__invoke_memfun_deref, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:74:14 (tckglobal+0x11900b) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #23 std::__invoke_result<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>::type std::__invoke<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:96:14 (tckglobal+0x11900b)
    #24 void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&)::'lambda'()::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/mutex:909:4 (tckglobal+0x11900b)
    #25 std::once_flag::_Prepare_execution::_Prepare_execution<void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&)::'lambda'()>(void (std::__future_base::_State_baseV2::*&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*))::'lambda'()::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/mutex:845:21 (tckglobal+0x11900b)
    #26 std::once_flag::_Prepare_execution::_Prepare_execution<void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&)::'lambda'()>(void (std::__future_base::_State_baseV2::*&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*))::'lambda'()::__invoke() /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/mutex:845:16 (tckglobal+0x11900b)
    #27 pthread_once <null> (tckglobal+0x6eaad) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #28 __gthread_once(int*, void (*)()) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/x86_64-linux-gnu/c++/14/bits/gthr-default.h:713:12 (tckglobal+0x118c36) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #29 void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/mutex:916:21 (tckglobal+0x118c36)
    #30 std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/future:435:2 (tckglobal+0x118c36)
    #31 std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/future:1781:6 (tckglobal+0x11848b) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #32 void std::__invoke_impl<void, void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>(std::__invoke_memfun_deref, void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*&&)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:74:14 (tckglobal+0x119547) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #33 std::__invoke_result<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>::type std::__invoke<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>(void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*&&)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:96:14 (tckglobal+0x119547)
    #34 void std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_thread.h:301:13 (tckglobal+0x119547)
    #35 std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>>::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_thread.h:308:11 (tckglobal+0x119547)
    #36 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*>>>::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_thread.h:253:13 (tckglobal+0x119547)
    #37 <null> <null> (libstdc++.so.6+0xecdb3) (BuildId: 753c6c8608b61d4e67be8f0c890e03e0aa046b8b)

  Location is heap block of size 77760 at 0x72c400014000 allocated by main thread:
    #0 operator new[](unsigned long) <null> (tckglobal+0xea55b) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #1 MR::ImageIO::Scratch::load(MR::Header const&, unsigned long) /home/runner/work/mrtrix3/mrtrix3/cpp/core/image_io/scratch.cpp:30:52 (libmrtrix-core.so+0x8098e5) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #2 MR::ImageIO::Base::open(MR::Header const&, unsigned long) /home/runner/work/mrtrix3/mrtrix3/cpp/core/image_io/base.cpp:32:3 (libmrtrix-core.so+0x80073a) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #3 MR::Image<float>::Buffer::Buffer(MR::Header&, bool) /home/runner/work/mrtrix3/mrtrix3/cpp/cmd/../core/image.h:298:7 (tckglobal+0x11e5ae) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #4 MR::Image<float> MR::Header::get_image<float>(bool) /home/runner/work/mrtrix3/mrtrix3/cpp/cmd/../core/image.h:325:11 (tckglobal+0x11e1c5) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #5 MR::Image<float>::scratch(MR::Header const&, std::basic_string_view<char, std::char_traits<char>>) /home/runner/work/mrtrix3/mrtrix3/cpp/core/image.h:203:52 (libmrtrix-core.so+0x46f719) (BuildId: 9e7efdbed18ee2b2795ddcc9b6bcf4a395a304e7)
    #6 MR::DWI::Tractography::GT::ExternalEnergyComputer::ExternalEnergyComputer(MR::DWI::Tractography::GT::Stats&, MR::Header&, MR::DWI::Tractography::GT::Properties const&) /home/runner/work/mrtrix3/mrtrix3/cpp/core/dwi/tractography/GT/externalenergy.cpp:43:9 (libmrtrix-core.so+0x46f719)
    #7 run() /home/runner/work/mrtrix3/mrtrix3/cpp/cmd/tckglobal.cpp:321:38 (tckglobal+0xf89e6) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #8 main /home/runner/work/mrtrix3/mrtrix3/cpp/core/command.h:114:5 (tckglobal+0xeb499) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)

  Thread T8 (tid=52093, running) created by main thread at:
    #0 pthread_create <null> (tckglobal+0x6aeef) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) <null> (libstdc++.so.6+0xeceb0) (BuildId: 753c6c8608b61d4e67be8f0c890e03e0aa046b8b)
    #2 void std::_Construct<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_construct.h:119:25 (tckglobal+0x116e5f) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #3 void std::allocator_traits<std::allocator<void>>::construct<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::allocator<void>&, std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/alloc_traits.h:657:4 (tckglobal+0x116e5f)
    #4 std::_Sp_counted_ptr_inplace<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::allocator<void>, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:607:4 (tckglobal+0x116e5f)
    #5 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, std::allocator<void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*&, std::_Sp_alloc_shared_tag<std::allocator<void>>, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:970:6 (tckglobal+0x116e5f)
    #6 std::__shared_ptr<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::_Sp_alloc_shared_tag<std::allocator<void>>, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:1713:14 (tckglobal+0x116e5f)
    #7 std::shared_ptr<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>>::shared_ptr<std::allocator<void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::_Sp_alloc_shared_tag<std::allocator<void>>, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr.h:463:4 (tckglobal+0x116e5f)
    #8 std::shared_ptr<std::enable_if<!is_array<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>>::value, std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>>::type> std::make_shared<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr.h:1007:14 (tckglobal+0x116e5f)
    #9 std::future<std::__invoke_result<std::decay<void (MR::DWI::Tractography::GT::MHSampler::*)()>::type, std::decay<MR::DWI::Tractography::GT::MHSampler*>::type>::type> std::async<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::launch, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/future:1812:18 (tckglobal+0x116e5f)
    #10 MR::Thread::(anonymous namespace)::__multi_thread<MR::DWI::Tractography::GT::MHSampler>::__multi_thread(MR::DWI::Tractography::GT::MHSampler&, unsigned long, std::basic_string_view<char, std::char_traits<char>>) /home/runner/work/mrtrix3/mrtrix3/cpp/cmd/../core/thread.h:147:23 (tckglobal+0xf969f) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #11 MR::Thread::(anonymous namespace)::__run<MR::Thread::(anonymous namespace)::__Multi<MR::DWI::Tractography::GT::MHSampler>>::operator()(MR::Thread::(anonymous namespace)::__Multi<MR::DWI::Tractography::GT::MHSampler>&, std::basic_string_view<char, std::char_traits<char>>) /home/runner/work/mrtrix3/mrtrix3/cpp/cmd/../core/thread.h:229:78 (tckglobal+0xf969f)
    #12 MR::Thread::(anonymous namespace)::__run<MR::Thread::(anonymous namespace)::__Multi<MR::DWI::Tractography::GT::MHSampler>>::type MR::Thread::run<MR::Thread::(anonymous namespace)::__Multi<MR::DWI::Tractography::GT::MHSampler>>(MR::Thread::(anonymous namespace)::__Multi<MR::DWI::Tractography::GT::MHSampler>&&, std::basic_string_view<char, std::char_traits<char>>) /home/runner/work/mrtrix3/mrtrix3/cpp/cmd/../core/thread.h:362:10 (tckglobal+0xf969f)
    #13 run() /home/runner/work/mrtrix3/mrtrix3/cpp/cmd/tckglobal.cpp:332:3 (tckglobal+0xf969f)
    #14 main /home/runner/work/mrtrix3/mrtrix3/cpp/core/command.h:114:5 (tckglobal+0xeb499) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)

  Thread T7 (tid=52092, running) created by main thread at:
    #0 pthread_create <null> (tckglobal+0x6aeef) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) <null> (libstdc++.so.6+0xeceb0) (BuildId: 753c6c8608b61d4e67be8f0c890e03e0aa046b8b)
    #2 void std::_Construct<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_construct.h:119:25 (tckglobal+0x116e5f) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #3 void std::allocator_traits<std::allocator<void>>::construct<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::allocator<void>&, std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/alloc_traits.h:657:4 (tckglobal+0x116e5f)
    #4 std::_Sp_counted_ptr_inplace<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::allocator<void>, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:607:4 (tckglobal+0x116e5f)
    #5 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, std::allocator<void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>*&, std::_Sp_alloc_shared_tag<std::allocator<void>>, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:970:6 (tckglobal+0x116e5f)
    #6 std::__shared_ptr<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::_Sp_alloc_shared_tag<std::allocator<void>>, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:1713:14 (tckglobal+0x116e5f)
    #7 std::shared_ptr<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>>::shared_ptr<std::allocator<void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::_Sp_alloc_shared_tag<std::allocator<void>>, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr.h:463:4 (tckglobal+0x116e5f)
    #8 std::shared_ptr<std::enable_if<!is_array<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>>::value, std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>>::type> std::make_shared<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>>, void>, void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr.h:1007:14 (tckglobal+0x116e5f)
    #9 std::future<std::__invoke_result<std::decay<void (MR::DWI::Tractography::GT::MHSampler::*)()>::type, std::decay<MR::DWI::Tractography::GT::MHSampler*>::type>::type> std::async<void (MR::DWI::Tractography::GT::MHSampler::*)(), MR::DWI::Tractography::GT::MHSampler*>(std::launch, void (MR::DWI::Tractography::GT::MHSampler::*&&)(), MR::DWI::Tractography::GT::MHSampler*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/future:1812:18 (tckglobal+0x116e5f)
    #10 MR::Thread::(anonymous namespace)::__multi_thread<MR::DWI::Tractography::GT::MHSampler>::__multi_thread(MR::DWI::Tractography::GT::MHSampler&, unsigned long, std::basic_string_view<char, std::char_traits<char>>) /home/runner/work/mrtrix3/mrtrix3/cpp/cmd/../core/thread.h:146:25 (tckglobal+0xf939d) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)
    #11 MR::Thread::(anonymous namespace)::__run<MR::Thread::(anonymous namespace)::__Multi<MR::DWI::Tractography::GT::MHSampler>>::operator()(MR::Thread::(anonymous namespace)::__Multi<MR::DWI::Tractography::GT::MHSampler>&, std::basic_string_view<char, std::char_traits<char>>) /home/runner/work/mrtrix3/mrtrix3/cpp/cmd/../core/thread.h:229:78 (tckglobal+0xf939d)
    #12 MR::Thread::(anonymous namespace)::__run<MR::Thread::(anonymous namespace)::__Multi<MR::DWI::Tractography::GT::MHSampler>>::type MR::Thread::run<MR::Thread::(anonymous namespace)::__Multi<MR::DWI::Tractography::GT::MHSampler>>(MR::Thread::(anonymous namespace)::__Multi<MR::DWI::Tractography::GT::MHSampler>&&, std::basic_string_view<char, std::char_traits<char>>) /home/runner/work/mrtrix3/mrtrix3/cpp/cmd/../core/thread.h:362:10 (tckglobal+0xf939d)
    #13 run() /home/runner/work/mrtrix3/mrtrix3/cpp/cmd/tckglobal.cpp:332:3 (tckglobal+0xf939d)
    #14 main /home/runner/work/mrtrix3/mrtrix3/cpp/core/command.h:114:5 (tckglobal+0xeb499) (BuildId: 9d53591b6064f6ae2ebab9adb66e7c85ced355a1)

SUMMARY: ThreadSanitizer: data race /home/runner/work/mrtrix3/mrtrix3/cpp/core/raw.h:180:26 in void MR::Raw::store_native<float>(float, void*, unsigned long)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions