Opened 4 years ago

Closed 4 years ago

#11249 closed defect (fixed)

potential hang with -j and --showtime= when using threads

Reported by: kidkat Owned by: kidkat
Priority: Normal Milestone: 2.9
Component: Other Version:
Keywords: Cc:

Description

A Visual Studio build will hang from time to time when run with -j. A thread waits for logForwarder->mFileSync and thus does not finish.

Here are the stack dumps:

>	[Inline Frame] cppcheck-core.dll!std::vector<std::pair<std::string,TimerResultsData>,std::allocator<std::pair<std::string,TimerResultsData>>>::{ctor}(std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<std::string const ,TimerResultsData>>>>) Line 529	C++
 	cppcheck-core.dll!TimerResults::showResults(SHOWTIME_MODES mode) Line 50	C++
 	cppcheck-core.dll!CppCheck::~CppCheck() Line 364	C++
 	cppcheck.exe!ThreadExecutor::threadProc(ThreadExecutor::SyncLogForwarder * logForwarder) Line 195	C++
>	[Inline Frame] cppcheck-core.dll!std::map<std::string,TimerResultsData,std::less<std::string>,std::allocator<std::pair<std::string const ,TimerResultsData>>>::operator[](const std::string &) Line 323	C++
 	cppcheck-core.dll!TimerResults::addResults(const std::string & str, long clocks) Line 71	C++
 	cppcheck-core.dll!Timer::stop() Line 106	C++
 	cppcheck-core.dll!Timer::~Timer() Line 88	C++
 	cppcheck-core.dll!Tokenizer::simplifyTokenList1(const char * FileName) Line 4958	C++
 	cppcheck-core.dll!Tokenizer::simplifyTokens1(const std::string & configuration) Line 2771	C++
 	cppcheck-core.dll!CppCheck::checkFile(const std::string & filename, const std::string & cfgname, std::basic_istream<char,std::char_traits<char>> & fileStream) Line 857	C++
 	cppcheck-core.dll!CppCheck::check(const std::string & path) Line 536	C++
 	cppcheck.exe!ThreadExecutor::threadProc(ThreadExecutor::SyncLogForwarder * logForwarder) Line 177	C++
 	[Inline Frame] cppcheck.exe!std::_Mutex_base::lock() Line 50	C++
>	cppcheck.exe!ThreadExecutor::threadProc(ThreadExecutor::SyncLogForwarder * logForwarder) Line 187	C++
>	[Inline Frame] cppcheck.exe!std::_State_manager<unsigned int>::_Get_value() Line 774	C++
 	[Inline Frame] cppcheck.exe!std::future<unsigned int>::get() Line 884	C++
 	[Inline Frame] cppcheck.exe!ThreadExecutor::check::__l2::<lambda_94354ea4d7b6cc94a99a1ba8e84816cb>::operator()(unsigned int) Line 145	C++
 	[Inline Frame] cppcheck.exe!std::accumulate(const std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::future<unsigned int>>>> _Val, const std::_Vector_iterator<std::_Vector_val<std::_Simple_types<std::future<unsigned int>>>>) Line 34	C++
 	cppcheck.exe!ThreadExecutor::check() Line 144	C++
 	cppcheck.exe!CppCheckExecutor::check_internal(CppCheck & cppcheck) Line 1001	C++
 	cppcheck.exe!CppCheckExecutor::check(int argc, const char * const * argv) Line 260	C++
 	cppcheck.exe!main(int argc, char * * argv) Line 111	C++

It appears it is related to the static TimerResults s_timerResults which are accessed from multiple threads without synchronization.

Change History (3)

comment:1 by kidkat, 4 years ago

Running TestThreadExecutor::many_threads with showtime and TSAN reports the following:

WARNING: ThreadSanitizer: data race (pid=25546)
  Read of size 8 at 0x7b14000425b8 by thread T20:
    #0 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/basic_string.h:1063:16 (testrunner+0x8f90e5) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #1 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/basic_string.h:3143:33 (testrunner+0x8f90e5)
    #2 bool std::operator<<char, std::char_traits<char>, std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/basic_string.h:3693:20 (testrunner+0x8f90e5)
    #3 std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator()(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_function.h:408:20 (testrunner+0x8f90e5)
    #4 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::_M_lower_bound(std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >*, std::_Rb_tree_node_base*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1951:7 (testrunner+0x8f90e5)
    #5 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::lower_bound(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1270:16 (testrunner+0x8f90e5)
    #6 std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, TimerResultsData, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::lower_bound(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_map.h:1307:21 (testrunner+0x8f90e5)
    #7 std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, TimerResultsData, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_map.h:507:17 (testrunner+0x8f90e5)
    #8 TimerResults::addResults(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long) /mnt/s/GitHub/cppcheck-fw/lib/timer.cpp:70:5 (testrunner+0x8f8bf9) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #9 Timer::stop() /mnt/s/GitHub/cppcheck-fw/lib/timer.cpp:101:32 (testrunner+0x8f8f5e) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #10 Timer::~Timer() /mnt/s/GitHub/cppcheck-fw/lib/timer.cpp:87:5 (testrunner+0x8f8db8) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #11 CppCheck::checkFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::istream&) /mnt/s/GitHub/cppcheck-fw/lib/cppcheck.cpp:741:9 (testrunner+0x7a2fd5) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #12 CppCheck::check(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /mnt/s/GitHub/cppcheck-fw/lib/cppcheck.cpp:536:12 (testrunner+0x799dd4) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #13 ThreadExecutor::threadProc(ThreadExecutor::SyncLogForwarder*) /mnt/s/GitHub/cppcheck-fw/cli/threadexecutor.cpp:177:35 (testrunner+0xa5b890) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #14 unsigned int std::__invoke_impl<unsigned int, unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::__invoke_other, unsigned int (*&&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:61:14 (testrunner+0xa5d6bb) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #15 std::__invoke_result<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>::type std::__invoke<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(unsigned int (*&&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:96:14 (testrunner+0xa5d6bb)
    #16 unsigned int std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:252:13 (testrunner+0xa5d6bb)
    #17 std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:259:11 (testrunner+0xa5d6bb)
    #18 std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/future:1387:27 (testrunner+0xa5d6bb)
    #19 std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter> std::__invoke_impl<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&>(std::__invoke_other, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:61:14 (testrunner+0xa5d5be) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #20 std::enable_if<__and_<std::__not_<std::is_void<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> > >, std::is_convertible<std::__invoke_result<std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&>::type, std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> > >::value, 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<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&>(std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:142:14 (testrunner+0xa5d5be)
    #21 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<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int> >::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_function.h:290:9 (testrunner+0xa5d5be)
    #22 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/12/../../../../include/c++/12/bits/std_function.h:591:9 (testrunner+0xa5d43f) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #23 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/12/../../../../include/c++/12/future:572:27 (testrunner+0xa5d43f)
    #24 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/12/../../../../include/c++/12/bits/invoke.h:74:14 (testrunner+0xa5d579) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #25 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/12/../../../../include/c++/12/bits/invoke.h:96:14 (testrunner+0xa5d579)
    #26 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/12/../../../../include/c++/12/mutex:852:4 (testrunner+0xa5d579)
    #27 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/12/../../../../include/c++/12/mutex:788:21 (testrunner+0xa5d579)
    #28 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/12/../../../../include/c++/12/mutex:788:16 (testrunner+0xa5d579)
    #29 pthread_once <null> (testrunner+0x173f0a) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #30 __gthread_once(int*, void (*)()) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/x86_64-linux-gnu/c++/12/bits/gthr-default.h:700:12 (testrunner+0xa5d1a7) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #31 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/12/../../../../include/c++/12/mutex:859:21 (testrunner+0xa5d1a7)
    #32 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/12/../../../../include/c++/12/future:412:2 (testrunner+0xa5d1a7)
    #33 std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/future:1749:6 (testrunner+0xa5c970) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #34 void std::__invoke_impl<void, void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*>(std::__invoke_memfun_deref, void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*&&)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:74:14 (testrunner+0xa5da31) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #35 std::__invoke_result<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*>::type std::__invoke<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*>(void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*&&)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:96:14 (testrunner+0xa5da31)
    #36 void std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:252:13 (testrunner+0xa5da31)
    #37 std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*> >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:259:11 (testrunner+0xa5da31)
    #38 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*> > >::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:210:13 (testrunner+0xa5da31)
    #39 <null> <null> (libstdc++.so.6+0xd49c2) (BuildId: 3e56005e70ae04b58b8ac895897f60bfb4bd70f0)

  Previous write of size 8 at 0x7b14000425b8 by thread T19:
    #0 operator new(unsigned long) <null> (testrunner+0x1f0b96) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #1 std::__new_allocator<std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::allocate(unsigned long, void const*) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/new_allocator.h:137:27 (testrunner+0x8fb470) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #2 std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > > >::allocate(std::allocator<std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >&, unsigned long) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/alloc_traits.h:464:20 (testrunner+0x8fb470)
    #3 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::_M_get_node() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:561:16 (testrunner+0x8fb470)
    #4 std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >* std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::_M_create_node<std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, std::tuple<> >(std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>&&, std::tuple<>&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:611:23 (testrunner+0x8fb470)
    #5 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::_Auto_node::_Auto_node<std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, std::tuple<> >(std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >&, std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>&&, std::tuple<>&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1636:18 (testrunner+0x8fb470)
    #6 std::_Rb_tree_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::_M_emplace_hint_unique<std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, std::tuple<> >(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>&&, std::tuple<>&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:2461:13 (testrunner+0x8fb470)
    #7 std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, TimerResultsData, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_map.h:511:15 (testrunner+0x8f9214) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #8 TimerResults::addResults(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long) /mnt/s/GitHub/cppcheck-fw/lib/timer.cpp:70:5 (testrunner+0x8f8bf9) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #9 Timer::stop() /mnt/s/GitHub/cppcheck-fw/lib/timer.cpp:101:32 (testrunner+0x8f8f5e) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #10 Timer::~Timer() /mnt/s/GitHub/cppcheck-fw/lib/timer.cpp:87:5 (testrunner+0x8f8db8) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #11 CppCheck::checkNormalTokens(Tokenizer const&) /mnt/s/GitHub/cppcheck-fw/lib/cppcheck.cpp:1028:5 (testrunner+0x79e5c3) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #12 CppCheck::checkFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::istream&) /mnt/s/GitHub/cppcheck-fw/lib/cppcheck.cpp:889:17 (testrunner+0x7a4ff9) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #13 CppCheck::check(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /mnt/s/GitHub/cppcheck-fw/lib/cppcheck.cpp:536:12 (testrunner+0x799dd4) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #14 ThreadExecutor::threadProc(ThreadExecutor::SyncLogForwarder*) /mnt/s/GitHub/cppcheck-fw/cli/threadexecutor.cpp:177:35 (testrunner+0xa5b890) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #15 unsigned int std::__invoke_impl<unsigned int, unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::__invoke_other, unsigned int (*&&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:61:14 (testrunner+0xa5d6bb) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #16 std::__invoke_result<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>::type std::__invoke<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(unsigned int (*&&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:96:14 (testrunner+0xa5d6bb)
    #17 unsigned int std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:252:13 (testrunner+0xa5d6bb)
    #18 std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:259:11 (testrunner+0xa5d6bb)
    #19 std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/future:1387:27 (testrunner+0xa5d6bb)
    #20 std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter> std::__invoke_impl<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&>(std::__invoke_other, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:61:14 (testrunner+0xa5d5be) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #21 std::enable_if<__and_<std::__not_<std::is_void<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> > >, std::is_convertible<std::__invoke_result<std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&>::type, std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> > >::value, 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<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&>(std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:142:14 (testrunner+0xa5d5be)
    #22 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<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int> >::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_function.h:290:9 (testrunner+0xa5d5be)
    #23 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/12/../../../../include/c++/12/bits/std_function.h:591:9 (testrunner+0xa5d43f) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #24 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/12/../../../../include/c++/12/future:572:27 (testrunner+0xa5d43f)
    #25 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/12/../../../../include/c++/12/bits/invoke.h:74:14 (testrunner+0xa5d579) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #26 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/12/../../../../include/c++/12/bits/invoke.h:96:14 (testrunner+0xa5d579)
    #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*&&)::'lambda'()::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/mutex:852:4 (testrunner+0xa5d579)
    #28 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/12/../../../../include/c++/12/mutex:788:21 (testrunner+0xa5d579)
    #29 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/12/../../../../include/c++/12/mutex:788:16 (testrunner+0xa5d579)
    #30 pthread_once <null> (testrunner+0x173f0a) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #31 __gthread_once(int*, void (*)()) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/x86_64-linux-gnu/c++/12/bits/gthr-default.h:700:12 (testrunner+0xa5d1a7) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #32 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/12/../../../../include/c++/12/mutex:859:21 (testrunner+0xa5d1a7)
    #33 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/12/../../../../include/c++/12/future:412:2 (testrunner+0xa5d1a7)
    #34 std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/future:1749:6 (testrunner+0xa5c970) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #35 void std::__invoke_impl<void, void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*>(std::__invoke_memfun_deref, void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*&&)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:74:14 (testrunner+0xa5da31) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #36 std::__invoke_result<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*>::type std::__invoke<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*>(void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*&&)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:96:14 (testrunner+0xa5da31)
    #37 void std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:252:13 (testrunner+0xa5da31)
    #38 std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*> >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:259:11 (testrunner+0xa5da31)
    #39 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*> > >::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:210:13 (testrunner+0xa5da31)
    #40 <null> <null> (libstdc++.so.6+0xd49c2) (BuildId: 3e56005e70ae04b58b8ac895897f60bfb4bd70f0)

  Location is heap block of size 80 at 0x7b1400042590 allocated by thread T19:
    #0 operator new(unsigned long) <null> (testrunner+0x1f0b96) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #1 std::__new_allocator<std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::allocate(unsigned long, void const*) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/new_allocator.h:137:27 (testrunner+0x8fb470) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #2 std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > > >::allocate(std::allocator<std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >&, unsigned long) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/alloc_traits.h:464:20 (testrunner+0x8fb470)
    #3 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::_M_get_node() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:561:16 (testrunner+0x8fb470)
    #4 std::_Rb_tree_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >* std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::_M_create_node<std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, std::tuple<> >(std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>&&, std::tuple<>&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:611:23 (testrunner+0x8fb470)
    #5 std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::_Auto_node::_Auto_node<std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, std::tuple<> >(std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >&, std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>&&, std::tuple<>&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:1636:18 (testrunner+0x8fb470)
    #6 std::_Rb_tree_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData>, std::_Select1st<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::_M_emplace_hint_unique<std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, std::tuple<> >(std::_Rb_tree_const_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> >, std::piecewise_construct_t const&, std::tuple<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>&&, std::tuple<>&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_tree.h:2461:13 (testrunner+0x8fb470)
    #7 std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, TimerResultsData, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, TimerResultsData> > >::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_map.h:511:15 (testrunner+0x8f9214) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #8 TimerResults::addResults(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, long) /mnt/s/GitHub/cppcheck-fw/lib/timer.cpp:70:5 (testrunner+0x8f8bf9) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #9 Timer::stop() /mnt/s/GitHub/cppcheck-fw/lib/timer.cpp:101:32 (testrunner+0x8f8f5e) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #10 Timer::~Timer() /mnt/s/GitHub/cppcheck-fw/lib/timer.cpp:87:5 (testrunner+0x8f8db8) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #11 CppCheck::checkNormalTokens(Tokenizer const&) /mnt/s/GitHub/cppcheck-fw/lib/cppcheck.cpp:1028:5 (testrunner+0x79e5c3) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #12 CppCheck::checkFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::istream&) /mnt/s/GitHub/cppcheck-fw/lib/cppcheck.cpp:889:17 (testrunner+0x7a4ff9) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #13 CppCheck::check(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /mnt/s/GitHub/cppcheck-fw/lib/cppcheck.cpp:536:12 (testrunner+0x799dd4) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #14 ThreadExecutor::threadProc(ThreadExecutor::SyncLogForwarder*) /mnt/s/GitHub/cppcheck-fw/cli/threadexecutor.cpp:177:35 (testrunner+0xa5b890) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #15 unsigned int std::__invoke_impl<unsigned int, unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::__invoke_other, unsigned int (*&&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:61:14 (testrunner+0xa5d6bb) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #16 std::__invoke_result<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>::type std::__invoke<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(unsigned int (*&&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:96:14 (testrunner+0xa5d6bb)
    #17 unsigned int std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:252:13 (testrunner+0xa5d6bb)
    #18 std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:259:11 (testrunner+0xa5d6bb)
    #19 std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/future:1387:27 (testrunner+0xa5d6bb)
    #20 std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter> std::__invoke_impl<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&>(std::__invoke_other, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:61:14 (testrunner+0xa5d5be) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #21 std::enable_if<__and_<std::__not_<std::is_void<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> > >, std::is_convertible<std::__invoke_result<std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&>::type, std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> > >::value, 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<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&>(std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:142:14 (testrunner+0xa5d5be)
    #22 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<unsigned int>, std::__future_base::_Result_base::_Deleter>, std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int> >::_M_invoke(std::_Any_data const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_function.h:290:9 (testrunner+0xa5d5be)
    #23 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/12/../../../../include/c++/12/bits/std_function.h:591:9 (testrunner+0xa5d43f) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #24 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/12/../../../../include/c++/12/future:572:27 (testrunner+0xa5d43f)
    #25 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/12/../../../../include/c++/12/bits/invoke.h:74:14 (testrunner+0xa5d579) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #26 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/12/../../../../include/c++/12/bits/invoke.h:96:14 (testrunner+0xa5d579)
    #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*&&)::'lambda'()::operator()() const /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/mutex:852:4 (testrunner+0xa5d579)
    #28 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/12/../../../../include/c++/12/mutex:788:21 (testrunner+0xa5d579)
    #29 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/12/../../../../include/c++/12/mutex:788:16 (testrunner+0xa5d579)
    #30 pthread_once <null> (testrunner+0x173f0a) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #31 __gthread_once(int*, void (*)()) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/x86_64-linux-gnu/c++/12/bits/gthr-default.h:700:12 (testrunner+0xa5d1a7) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #32 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/12/../../../../include/c++/12/mutex:859:21 (testrunner+0xa5d1a7)
    #33 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/12/../../../../include/c++/12/future:412:2 (testrunner+0xa5d1a7)
    #34 std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/future:1749:6 (testrunner+0xa5c970) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #35 void std::__invoke_impl<void, void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*>(std::__invoke_memfun_deref, void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*&&)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:74:14 (testrunner+0xa5da31) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #36 std::__invoke_result<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*>::type std::__invoke<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*>(void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*&&)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/invoke.h:96:14 (testrunner+0xa5da31)
    #37 void std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:252:13 (testrunner+0xa5da31)
    #38 std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*> >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:259:11 (testrunner+0xa5da31)
    #39 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>::*)(), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*> > >::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/std_thread.h:210:13 (testrunner+0xa5da31)
    #40 <null> <null> (libstdc++.so.6+0xd49c2) (BuildId: 3e56005e70ae04b58b8ac895897f60bfb4bd70f0)

  Thread T20 (tid=25567, running) created by main thread at:
    #0 pthread_create <null> (testrunner+0x170bdd) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) <null> (libstdc++.so.6+0xd4ccb) (BuildId: 3e56005e70ae04b58b8ac895897f60bfb4bd70f0)
    #2 void std::_Construct<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_construct.h:119:25 (testrunner+0xa5bc70) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #3 void std::allocator_traits<std::allocator<void> >::construct<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::allocator<void>&, std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/alloc_traits.h:635:4 (testrunner+0xa5bc70)
    #4 std::_Sp_counted_ptr_inplace<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::allocator<void>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr_base.h:604:4 (testrunner+0xa5bc70)
    #5 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, std::allocator<void>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*&, std::_Sp_alloc_shared_tag<std::allocator<void> >, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr_base.h:972:6 (testrunner+0xa5bc70)
    #6 std::__shared_ptr<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::_Sp_alloc_shared_tag<std::allocator<void> >, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr_base.h:1712:14 (testrunner+0xa5bc70)
    #7 std::shared_ptr<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int> >::shared_ptr<std::allocator<void>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::_Sp_alloc_shared_tag<std::allocator<void> >, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr.h:464:4 (testrunner+0xa5bc70)
    #8 std::shared_ptr<std::enable_if<!(is_array<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int> >::value), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int> >::type> std::make_shared<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr.h:1009:14 (testrunner+0xa5bc70)
    #9 std::future<std::__invoke_result<std::decay<unsigned int (&)(ThreadExecutor::SyncLogForwarder*)>::type, std::decay<ThreadExecutor::SyncLogForwarder*>::type>::type> std::async<unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::launch, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/future:1780:18 (testrunner+0xa5bc70)
    #10 ThreadExecutor::check() /mnt/s/GitHub/cppcheck-fw/cli/threadexecutor.cpp:136:40 (testrunner+0xa5b047) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #11 TestThreadExecutor::check(unsigned int, int, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, SHOWTIME_MODES) /mnt/s/GitHub/cppcheck-fw/test/testthreadexecutor.cpp:63:9 (testrunner+0x4fc8a2) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #12 TestThreadExecutor::many_threads_showtime() /mnt/s/GitHub/cppcheck-fw/test/testthreadexecutor.cpp:102:9 (testrunner+0x4fbed7) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #13 TestThreadExecutor::run() /mnt/s/GitHub/cppcheck-fw/test/testthreadexecutor.cpp:71:9 (testrunner+0x4fba08) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #14 TestFixture::run(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /mnt/s/GitHub/cppcheck-fw/test/testsuite.cpp:326:9 (testrunner+0x480775) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #15 TestFixture::runTests(options const&) /mnt/s/GitHub/cppcheck-fw/test/testsuite.cpp:350:23 (testrunner+0x480e64) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #16 main /mnt/s/GitHub/cppcheck-fw/test/testrunner.cpp:51:42 (testrunner+0x414848) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)

  Thread T19 (tid=25566, running) created by main thread at:
    #0 pthread_create <null> (testrunner+0x170bdd) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) <null> (libstdc++.so.6+0xd4ccb) (BuildId: 3e56005e70ae04b58b8ac895897f60bfb4bd70f0)
    #2 void std::_Construct<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/stl_construct.h:119:25 (testrunner+0xa5bc70) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #3 void std::allocator_traits<std::allocator<void> >::construct<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::allocator<void>&, std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/alloc_traits.h:635:4 (testrunner+0xa5bc70)
    #4 std::_Sp_counted_ptr_inplace<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::allocator<void>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr_base.h:604:4 (testrunner+0xa5bc70)
    #5 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, std::allocator<void>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>*&, std::_Sp_alloc_shared_tag<std::allocator<void> >, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr_base.h:972:6 (testrunner+0xa5bc70)
    #6 std::__shared_ptr<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::_Sp_alloc_shared_tag<std::allocator<void> >, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr_base.h:1712:14 (testrunner+0xa5bc70)
    #7 std::shared_ptr<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int> >::shared_ptr<std::allocator<void>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::_Sp_alloc_shared_tag<std::allocator<void> >, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr.h:464:4 (testrunner+0xa5bc70)
    #8 std::shared_ptr<std::enable_if<!(is_array<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int> >::value), std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int> >::type> std::make_shared<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<unsigned int (*)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*> >, unsigned int>, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/shared_ptr.h:1009:14 (testrunner+0xa5bc70)
    #9 std::future<std::__invoke_result<std::decay<unsigned int (&)(ThreadExecutor::SyncLogForwarder*)>::type, std::decay<ThreadExecutor::SyncLogForwarder*>::type>::type> std::async<unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*>(std::launch, unsigned int (&)(ThreadExecutor::SyncLogForwarder*), ThreadExecutor::SyncLogForwarder*&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/future:1780:18 (testrunner+0xa5bc70)
    #10 ThreadExecutor::check() /mnt/s/GitHub/cppcheck-fw/cli/threadexecutor.cpp:136:40 (testrunner+0xa5b047) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #11 TestThreadExecutor::check(unsigned int, int, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, SHOWTIME_MODES) /mnt/s/GitHub/cppcheck-fw/test/testthreadexecutor.cpp:63:9 (testrunner+0x4fc8a2) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #12 TestThreadExecutor::many_threads_showtime() /mnt/s/GitHub/cppcheck-fw/test/testthreadexecutor.cpp:102:9 (testrunner+0x4fbed7) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #13 TestThreadExecutor::run() /mnt/s/GitHub/cppcheck-fw/test/testthreadexecutor.cpp:71:9 (testrunner+0x4fba08) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #14 TestFixture::run(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /mnt/s/GitHub/cppcheck-fw/test/testsuite.cpp:326:9 (testrunner+0x480775) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #15 TestFixture::runTests(options const&) /mnt/s/GitHub/cppcheck-fw/test/testsuite.cpp:350:23 (testrunner+0x480e64) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)
    #16 main /mnt/s/GitHub/cppcheck-fw/test/testrunner.cpp:51:42 (testrunner+0x414848) (BuildId: d8670eec4ddbb3677167baf764bd6743e9d805c1)

SUMMARY: ThreadSanitizer: data race /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/basic_string.h:1063:16 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::size() const

comment:2 by kidkat, 4 years ago

Owner: changed from noone to kidkat
Status: newassigned
Summary: deadlock with -j in Visual Studio buildpotential hang with -j and --showtime= when using threads

comment:3 by kidkat, 4 years ago

Milestone: 2.9
Resolution: fixed
Status: assignedclosed
Note: See TracTickets for help on using tickets.