Created
April 28, 2021 21:18
-
-
Save xanderdunn/f5ca78932f3ae8642fe59b6aa0e9705f to your computer and use it in GitHub Desktop.
Minimal quill Example Thread Sanitizer output
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
================== | |
WARNING: ThreadSanitizer: data race (pid=30925) | |
Read of size 8 at 0x7b04000004a0 by thread T1: | |
#0 std::__shared_ptr<quill::detail::ThreadContext, (__gnu_cxx::_Lock_policy)2>::get() const <null> (test.exe+0x11e36) | |
#1 quill::detail::ThreadContextCollection::backend_thread_contexts_cache() /home/xander/dev/vcpkg/buildtrees/quill/src/v1.6.2-b72390cb62.clean/quill/src/detail/ThreadContextCollection.cpp:67 (test.exe+0x52511) | |
#2 quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}::operator()() const <null> (test.exe+0xe1a6) | |
#3 void std::__invoke_impl<void, quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>(std::__invoke_other, quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}&&) <null> (test.exe+0x25d8c) | |
#4 std::__invoke_result<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>::type std::__invoke<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>(quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}&&, (std::__invoke_result&&)...) <null> (test.exe+0x257ec) | |
#5 void std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) <null> (test.exe+0x2546c) | |
#6 std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> >::operator()() <null> (test.exe+0x24bea) | |
#7 std::thread::_State_impl<std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> > >::_M_run() <null> (test.exe+0x23ec8) | |
#8 <null> <null> (libstdc++.so.6+0xd0e8f) | |
Previous write of size 8 at 0x7b04000004a0 by main thread: | |
#0 operator new(unsigned long) <null> (libtsan.so.0+0x8a2ce) | |
#1 __gnu_cxx::new_allocator<std::shared_ptr<quill::detail::ThreadContext> >::allocate(unsigned long, void const*) /usr/include/c++/10/ext/new_allocator.h:115 (test.exe+0x55b7f) | |
#2 initialize_logging() /home/xander/dev/my_model/test.cc:35 (test.exe+0xa3fe) | |
#3 main /home/xander/dev/my_model/test.cc:40 (test.exe+0xa5c2) | |
As if synchronized via sleep: | |
#0 nanosleep <null> (libtsan.so.0+0x61cbc) | |
#1 void std::this_thread::sleep_for<long, std::ratio<1l, 1000000000l> >(std::chrono::duration<long, std::ratio<1l, 1000000000l> > const&) <null> (test.exe+0x13e4f) | |
#2 quill::detail::BackendWorker::_main_loop() <null> (test.exe+0x108f7) | |
#3 quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}::operator()() const <null> (test.exe+0xe189) | |
#4 void std::__invoke_impl<void, quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>(std::__invoke_other, quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}&&) <null> (test.exe+0x25d8c) | |
#5 std::__invoke_result<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>::type std::__invoke<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>(quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}&&, (std::__invoke_result&&)...) <null> (test.exe+0x257ec) | |
#6 void std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) <null> (test.exe+0x2546c) | |
#7 std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> >::operator()() <null> (test.exe+0x24bea) | |
#8 std::thread::_State_impl<std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> > >::_M_run() <null> (test.exe+0x23ec8) | |
#9 <null> <null> (libstdc++.so.6+0xd0e8f) | |
Location is heap block of size 16 at 0x7b04000004a0 allocated by main thread: | |
#0 operator new(unsigned long) <null> (libtsan.so.0+0x8a2ce) | |
#1 __gnu_cxx::new_allocator<std::shared_ptr<quill::detail::ThreadContext> >::allocate(unsigned long, void const*) /usr/include/c++/10/ext/new_allocator.h:115 (test.exe+0x55b7f) | |
#2 initialize_logging() /home/xander/dev/my_model/test.cc:35 (test.exe+0xa3fe) | |
#3 main /home/xander/dev/my_model/test.cc:40 (test.exe+0xa5c2) | |
Thread T1 'Quill_Backend' (tid=30927, running) created by main thread at: | |
#0 pthread_create <null> (libtsan.so.0+0x5d445) | |
#1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) <null> (libstdc++.so.6+0xd1124) | |
#2 quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const <null> (test.exe+0xde88) | |
#3 void std::__invoke_impl<void, quill::detail::BackendWorker::run()::{lambda()#1}>(std::__invoke_other, quill::detail::BackendWorker::run()::{lambda()#1}&&) <null> (test.exe+0x1b0d7) | |
#4 std::__invoke_result<quill::detail::BackendWorker::run()::{lambda()#1}>::type std::__invoke<quill::detail::BackendWorker::run()::{lambda()#1}>(std::__invoke_result&&, (quill::detail::BackendWorker::run()::{lambda()#1}&&)...) <null> (test.exe+0x17155) | |
#5 std::call_once<quill::detail::BackendWorker::run()::{lambda()#1}>(std::once_flag&, quill::detail::BackendWorker::run()::{lambda()#1}&&)::{lambda()#1}::operator()() const <null> (test.exe+0x130f7) | |
#6 std::call_once<quill::detail::BackendWorker::run()::{lambda()#1}>(std::once_flag&, quill::detail::BackendWorker::run()::{lambda()#1}&&)::{lambda()#2}::operator()() const <null> (test.exe+0x1315e) | |
#7 std::call_once<quill::detail::BackendWorker::run()::{lambda()#1}>(std::once_flag&, quill::detail::BackendWorker::run()::{lambda()#1}&&)::{lambda()#2}::_FUN() <null> (test.exe+0x1319d) | |
#8 pthread_once <null> (libtsan.so.0+0x40784) | |
#9 __gthread_once(int*, void (*)()) <null> (test.exe+0xb577) | |
#10 void std::call_once<quill::detail::BackendWorker::run()::{lambda()#1}>(std::once_flag&, quill::detail::BackendWorker::run()::{lambda()#1}&&) <null> (test.exe+0x13290) | |
#11 quill::detail::BackendWorker::run() <null> (test.exe+0xe738) | |
#12 quill::detail::LogManager::start_backend_worker(bool, std::initializer_list<int> const&) <null> (test.exe+0x10aa5) | |
#13 quill::start(bool, std::initializer_list<int>) <null> (test.exe+0x10b5b) | |
#14 initialize_logging() /home/xander/dev/my_model/test.cc:30 (test.exe+0xa33a) | |
#15 main /home/xander/dev/my_model/test.cc:40 (test.exe+0xa5c2) | |
SUMMARY: ThreadSanitizer: data race (/home/xander/dev/my_model/test.exe+0x11e36) in std::__shared_ptr<quill::detail::ThreadContext, (__gnu_cxx::_Lock_policy)2>::get() const | |
================== | |
================== | |
WARNING: ThreadSanitizer: data race (pid=30925) | |
Read of size 8 at 0x7b4800000100 by thread T1: | |
#0 quill::detail::BackendWorker::_read_event_queue(quill::detail::ThreadContext*) <null> (test.exe+0xe9fa) | |
#1 quill::detail::BackendWorker::_populate_priority_queue(std::vector<quill::detail::ThreadContext*, quill::detail::CacheAlignedAllocator<quill::detail::ThreadContext*> > const&) <null> (test.exe+0xe914) | |
#2 quill::detail::BackendWorker::_exit() <null> (test.exe+0x109bf) | |
#3 quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}::operator()() const <null> (test.exe+0xe1a6) | |
#4 void std::__invoke_impl<void, quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>(std::__invoke_other, quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}&&) <null> (test.exe+0x25d8c) | |
#5 std::__invoke_result<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>::type std::__invoke<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>(quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}&&, (std::__invoke_result&&)...) <null> (test.exe+0x257ec) | |
#6 void std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) <null> (test.exe+0x2546c) | |
#7 std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> >::operator()() <null> (test.exe+0x24bea) | |
#8 std::thread::_State_impl<std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> > >::_M_run() <null> (test.exe+0x23ec8) | |
#9 <null> <null> (libstdc++.so.6+0xd0e8f) | |
Previous write of size 8 at 0x7b4800000100 by main thread: | |
#0 posix_memalign <null> (libtsan.so.0+0x2f579) | |
#1 quill::detail::aligned_alloc(unsigned long, unsigned long) /home/xander/dev/vcpkg/buildtrees/quill/src/v1.6.2-b72390cb62.clean/quill/src/detail/misc/Os.cpp:254 (test.exe+0x3923d) | |
#2 initialize_logging() /home/xander/dev/my_model/test.cc:35 (test.exe+0xa3fe) | |
#3 main /home/xander/dev/my_model/test.cc:40 (test.exe+0xa5c2) | |
As if synchronized via sleep: | |
#0 nanosleep <null> (libtsan.so.0+0x61cbc) | |
#1 void std::this_thread::sleep_for<long, std::ratio<1l, 1000000000l> >(std::chrono::duration<long, std::ratio<1l, 1000000000l> > const&) <null> (test.exe+0x13e4f) | |
#2 quill::detail::BackendWorker::_main_loop() <null> (test.exe+0x108f7) | |
#3 quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}::operator()() const <null> (test.exe+0xe189) | |
#4 void std::__invoke_impl<void, quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>(std::__invoke_other, quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}&&) <null> (test.exe+0x25d8c) | |
#5 std::__invoke_result<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>::type std::__invoke<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}>(quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}&&, (std::__invoke_result&&)...) <null> (test.exe+0x257ec) | |
#6 void std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) <null> (test.exe+0x2546c) | |
#7 std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> >::operator()() <null> (test.exe+0x24bea) | |
#8 std::thread::_State_impl<std::thread::_Invoker<std::tuple<quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const::{lambda()#1}> > >::_M_run() <null> (test.exe+0x23ec8) | |
#9 <null> <null> (libstdc++.so.6+0xd0e8f) | |
Location is heap block of size 384 at 0x7b4800000000 allocated by main thread: | |
#0 posix_memalign <null> (libtsan.so.0+0x2f579) | |
#1 quill::detail::aligned_alloc(unsigned long, unsigned long) /home/xander/dev/vcpkg/buildtrees/quill/src/v1.6.2-b72390cb62.clean/quill/src/detail/misc/Os.cpp:254 (test.exe+0x3923d) | |
#2 initialize_logging() /home/xander/dev/my_model/test.cc:35 (test.exe+0xa3fe) | |
#3 main /home/xander/dev/my_model/test.cc:40 (test.exe+0xa5c2) | |
Thread T1 'Quill_Backend' (tid=30927, running) created by main thread at: | |
#0 pthread_create <null> (libtsan.so.0+0x5d445) | |
#1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) <null> (libstdc++.so.6+0xd1124) | |
#2 quill::detail::BackendWorker::run()::{lambda()#1}::operator()() const <null> (test.exe+0xde88) | |
#3 void std::__invoke_impl<void, quill::detail::BackendWorker::run()::{lambda()#1}>(std::__invoke_other, quill::detail::BackendWorker::run()::{lambda()#1}&&) <null> (test.exe+0x1b0d7) | |
#4 std::__invoke_result<quill::detail::BackendWorker::run()::{lambda()#1}>::type std::__invoke<quill::detail::BackendWorker::run()::{lambda()#1}>(std::__invoke_result&&, (quill::detail::BackendWorker::run()::{lambda()#1}&&)...) <null> (test.exe+0x17155) | |
#5 std::call_once<quill::detail::BackendWorker::run()::{lambda()#1}>(std::once_flag&, quill::detail::BackendWorker::run()::{lambda()#1}&&)::{lambda()#1}::operator()() const <null> (test.exe+0x130f7) | |
#6 std::call_once<quill::detail::BackendWorker::run()::{lambda()#1}>(std::once_flag&, quill::detail::BackendWorker::run()::{lambda()#1}&&)::{lambda()#2}::operator()() const <null> (test.exe+0x1315e) | |
#7 std::call_once<quill::detail::BackendWorker::run()::{lambda()#1}>(std::once_flag&, quill::detail::BackendWorker::run()::{lambda()#1}&&)::{lambda()#2}::_FUN() <null> (test.exe+0x1319d) | |
#8 pthread_once <null> (libtsan.so.0+0x40784) | |
#9 __gthread_once(int*, void (*)()) <null> (test.exe+0xb577) | |
#10 void std::call_once<quill::detail::BackendWorker::run()::{lambda()#1}>(std::once_flag&, quill::detail::BackendWorker::run()::{lambda()#1}&&) <null> (test.exe+0x13290) | |
#11 quill::detail::BackendWorker::run() <null> (test.exe+0xe738) | |
#12 quill::detail::LogManager::start_backend_worker(bool, std::initializer_list<int> const&) <null> (test.exe+0x10aa5) | |
#13 quill::start(bool, std::initializer_list<int>) <null> (test.exe+0x10b5b) | |
#14 initialize_logging() /home/xander/dev/my_model/test.cc:30 (test.exe+0xa33a) | |
#15 main /home/xander/dev/my_model/test.cc:40 (test.exe+0xa5c2) | |
SUMMARY: ThreadSanitizer: data race (/home/xander/dev/my_model/test.exe+0xe9fa) in quill::detail::BackendWorker::_read_event_queue(quill::detail::ThreadContext*) | |
================== | |
ThreadSanitizer: reported 2 warnings |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment