Skip to content

Instantly share code, notes, and snippets.

@cbodley
Created May 14, 2024 20:27
Show Gist options
  • Save cbodley/dac6e7c5f6a960878ddfb39d1be63273 to your computer and use it in GitHub Desktop.
Save cbodley/dac6e7c5f6a960878ddfb39d1be63273 to your computer and use it in GitHub Desktop.
signal_co_spawn.cc thread sanitizer output
cbodley@fedora ~/test/signal_co_spawn $ g++ -std=c++20 -fsanitize=thread -lgtest_main -lgtest -I/home/cbodley/ceph/build/boost/include -L/home/cbodley/ceph/build/boost/lib -lboost_system main.cc
In file included from /usr/include/c++/13/latch:38,
from main.cc:3:
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘boost::asio::detail::std_fenced_block::std_fenced_block(full_t)’ at /home/cbodley/ceph/build/boost/include/boost/asio/detail/std_fenced_block.hpp:43:29:
/usr/include/c++/13/bits/atomic_base.h:144:26: warning: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Wtsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘boost::asio::detail::std_fenced_block::~std_fenced_block()’ at /home/cbodley/ceph/build/boost/include/boost/asio/detail/std_fenced_block.hpp:49:29:
/usr/include/c++/13/bits/atomic_base.h:144:26: warning: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Wtsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
cbodley@fedora ~/test/signal_co_spawn $ LD_LIBRARY_PATH=/home/cbodley/ceph/build/boost/lib ./a.out
Running main() from /builddir/build/BUILD/googletest-1.13.0/googletest/src/gtest_main.cc
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from CoSpawn
[ RUN ] CoSpawn.Cancel
==================
WARNING: ThreadSanitizer: data race (pid=1476319)
Read of size 4 at 0x7b0c00001810 by thread T1:
#0 boost::asio::cancellation_state::cancelled() const <null> (a.out+0x416449) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#1 auto boost::asio::detail::awaitable_frame_base<boost::asio::any_io_executor>::await_transform<void>(boost::asio::awaitable<void, boost::asio::any_io_executor>) const <null> (a.out+0x417661) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#2 thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}::operator()(thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}::operator()() const::_ZZ12thread_entryRN5boost4asio19cancellation_signalERSt5latchENKUlvE_clEv.Frame*) [clone .actor] <null> (a.out+0x407444) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#3 std::__n4861::coroutine_handle<void>::resume() const <null> (a.out+0x41657f) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#4 boost::asio::detail::awaitable_frame_base<boost::asio::any_io_executor>::resume() <null> (a.out+0x42d42a) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#5 boost::asio::detail::awaitable_thread<boost::asio::any_io_executor>::pump() <null> (a.out+0x42b349) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#6 boost::asio::detail::awaitable_async_op_handler<void (), boost::asio::any_io_executor>::operator()() <null> (a.out+0x433671) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#7 boost::asio::detail::binder0<boost::asio::detail::awaitable_async_op_handler<void (), boost::asio::any_io_executor> >::operator()() <null> (a.out+0x433304) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#8 void boost::asio::detail::executor_function::complete<boost::asio::detail::binder0<boost::asio::detail::awaitable_async_op_handler<void (), boost::asio::any_io_executor> >, std::allocator<void> >(boost::asio::detail::executor_function::impl_base*, bool) <null> (a.out+0x4335a6) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#9 boost::asio::detail::executor_function::operator()() <null> (a.out+0x40c95b) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#10 boost::asio::detail::executor_op<boost::asio::detail::executor_function, std::allocator<void>, boost::asio::detail::scheduler_operation>::do_complete(void*, boost::asio::detail::scheduler_operation*, boost::system::error_code const&, unsigned long) <null> (a.out+0x42cc0d) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#11 boost::asio::detail::scheduler_operation::complete(void*, boost::system::error_code const&, unsigned long) <null> (a.out+0x41188e) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#12 boost::asio::detail::scheduler::do_run_one(boost::asio::detail::conditionally_enabled_mutex::scoped_lock&, boost::asio::detail::scheduler_thread_info&, boost::system::error_code const&) <null> (a.out+0x415fb3) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#13 boost::asio::detail::scheduler::run(boost::system::error_code&) <null> (a.out+0x4158a9) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#14 boost::asio::io_context::run() <null> (a.out+0x41691c) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#15 thread_entry(boost::asio::cancellation_signal&, std::latch&) <null> (a.out+0x407966) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#16 void std::__invoke_impl<void, void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> >(std::__invoke_other, void (*&&)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>&&, std::reference_wrapper<std::latch>&&) <null> (a.out+0x4366a3) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#17 std::__invoke_result<void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> >::type std::__invoke<void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> >(void (*&&)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>&&, std::reference_wrapper<std::latch>&&) <null> (a.out+0x4363bb) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#18 void std::thread::_Invoker<std::tuple<void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> > >::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) <null> (a.out+0x435eca) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#19 std::thread::_Invoker<std::tuple<void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> > >::operator()() <null> (a.out+0x43565c) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#20 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> > > >::_M_run() <null> (a.out+0x433f02) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#21 execute_native_thread_routine <null> (libstdc++.so.6+0xe33c2) (BuildId: 135b17851e2f57f305c48a54822dfd08cdaf060e)
Previous write of size 4 at 0x7b0c00001810 by main thread:
#0 boost::asio::cancellation_state::impl<boost::asio::cancellation_filter<(boost::asio::cancellation_type)1>, boost::asio::cancellation_filter<(boost::asio::cancellation_type)1> >::operator()(boost::asio::cancellation_type) <null> (a.out+0x43518a) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#1 boost::asio::detail::cancellation_handler<boost::asio::cancellation_state::impl<boost::asio::cancellation_filter<(boost::asio::cancellation_type)1>, boost::asio::cancellation_filter<(boost::asio::cancellation_type)1> > >::call(boost::asio::cancellation_type) <null> (a.out+0x433b0e) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#2 boost::asio::cancellation_signal::emit(boost::asio::cancellation_type) <null> (a.out+0x41118e) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#3 boost::asio::detail::co_spawn_cancellation_handler<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, boost::asio::any_io_executor, void>::operator()(boost::asio::cancellation_type) <null> (a.out+0x43530a) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#4 boost::asio::detail::cancellation_handler<boost::asio::detail::co_spawn_cancellation_handler<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, boost::asio::any_io_executor, void> >::call(boost::asio::cancellation_type) <null> (a.out+0x433be6) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#5 boost::asio::cancellation_signal::emit(boost::asio::cancellation_type) <null> (a.out+0x41118e) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#6 CoSpawn_Cancel_Test::TestBody() <null> (a.out+0x407a67) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#7 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) [clone .constprop.0] <null> (libgtest.so.1.13.0+0x554a2) (BuildId: b5d53101d2632766c3089035f6f7f5d25cb01d4a)
Location is heap block of size 48 at 0x7b0c00001800 allocated by thread T1:
#0 aligned_alloc <null> (libtsan.so.2+0x3dcb1) (BuildId: 66cad9ec271b9ca10171b0eb35058d43560b9843)
#1 boost::asio::aligned_new(unsigned long, unsigned long) <null> (a.out+0x40c11f) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#2 void* boost::asio::detail::thread_info_base::allocate<boost::asio::detail::thread_info_base::cancellation_signal_tag>(boost::asio::detail::thread_info_base::cancellation_signal_tag, boost::asio::detail::thread_info_base*, unsigned long, unsigned long) <null> (a.out+0x419ecf) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#3 boost::asio::cancellation_slot::prepare_memory(unsigned long, unsigned long) <null> (a.out+0x4116a1) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#4 boost::asio::cancellation_state::impl<boost::asio::cancellation_filter<(boost::asio::cancellation_type)1>, boost::asio::cancellation_filter<(boost::asio::cancellation_type)1> >& boost::asio::cancellation_slot::emplace<boost::asio::cancellation_state::impl<boost::asio::cancellation_filter<(boost::asio::cancellation_type)1>, boost::asio::cancellation_filter<(boost::asio::cancellation_type)1> >>() <null> (a.out+0x42a78a) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#5 boost::asio::cancellation_state::cancellation_state<boost::asio::cancellation_slot>(boost::asio::cancellation_slot) <null> (a.out+0x4286ec) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#6 void boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor>::operator()<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}>(boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>&&, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}&&) const <null> (a.out+0x408150) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#7 void boost::asio::async_result<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, void (std::__exception_ptr::exception_ptr)>::init_wrapper<boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor> >::operator()<void (*)(std::__exception_ptr::exception_ptr), thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}>(void (*&&)(std::__exception_ptr::exception_ptr), thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}&&) <null> (a.out+0x408014) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#8 void boost::asio::detail::completion_handler_async_result<void (*)(std::__exception_ptr::exception_ptr), void (std::__exception_ptr::exception_ptr)>::initiate<boost::asio::async_result<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, void (std::__exception_ptr::exception_ptr)>::init_wrapper<boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor> >, void (*)(std::__exception_ptr::exception_ptr), thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}>(boost::asio::async_result<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, void (std::__exception_ptr::exception_ptr)>::init_wrapper<boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor> >&&, void (*&&)(std::__exception_ptr::exception_ptr), thread_entry(boost::asio::cancellation_signal&, std::latch&)
::{lambda()#1}&&) <null> (a.out+0x407fa1) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#9 boost::asio::constraint<boost::asio::detail::async_result_has_initiate_memfn<void (*)(std::__exception_ptr::exception_ptr), void (std::__exception_ptr::exception_ptr)>::value, decltype (boost::asio::async_result<std::decay<void (*)(std::__exception_ptr::exception_ptr)>::type, void (std::__exception_ptr::exception_ptr)>::initiate(static_cast<boost::asio::async_result<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, void (std::__exception_ptr::exception_ptr)>::init_wrapper<boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor> >&&>({parm#1}), static_cast<void (*&&)(std::__exception_ptr::exception_ptr)>({parm#2}), static_cast<thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}&&>({parm#3})))>::type boost::asio::async_initiate<void (*)(std::__exception_ptr::exception_ptr), void (std::__exception_ptr::exception_ptr), boost::asio::async_result<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, void (std::__exception_ptr::exception_ptr)>::init_wrapper<boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor> >, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}>(boost::asio::async_result<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, void (std::__exception_ptr::exception_ptr)>::init_wrapper<boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor> >&&, boost::asio::type_identity<void (*)(std::__exception_ptr::exception_ptr)>::type&, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}&&) <null> (a.out+0x407f48) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#10 decltype ((async_initiate<void (*)(std::__exception_ptr::exception_ptr), void (std::__exception_ptr::exception_ptr)>)((declval<boost::asio::async_result<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, void (std::__exception_ptr::exception_ptr)>::init_wrapper<std::decay<boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor> >::type> >)(), ({parm#2}.get)(), static_cast<thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}&&>({parm#3}))) boost::asio::async_result<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, void (std::__exception_ptr::exception_ptr)>::initiate<boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor>, boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}>(boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor>&&, boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>&&, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}&&) <null> (a.out+0x407b99) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#11 boost::asio::constraint<boost::asio::detail::async_result_has_initiate_memfn<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, void (std::__exception_ptr::exception_ptr)>::value, decltype (boost::asio::async_result<std::decay<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot> >::type, void (std::__exception_ptr::exception_ptr)>::initiate(static_cast<boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor>&&>({parm#1}), static_cast<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>&&>({parm#2}), static_cast<thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}&&>({parm#3})))>::type boost::asio::async_initiate<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>, void (std::__exception_ptr::exception_ptr), boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor>, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}>(boost::asio::detail::initiate_co_spawn<boost::asio::any_io_executor>&&, boost::asio::type_identity<boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot> >::type&, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}&&) <null> (a.out+0x407b0e) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#12 auto boost::asio::co_spawn<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0ul>, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}, boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot> >(boost::asio::io_context::basic_executor_type<std::allocator<void>, 0ul> const&, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}&&, boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>&&, boost::asio::constraint<boost::asio::is_executor<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0ul> >::value||boost::asio::execution::is_executor<boost::asio::io_context::basic_executor_type<std::allocator<void>, 0ul> >::value, int>::type) <null> (a.out+0x4077e8) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#13 auto boost::asio::co_spawn<boost::asio::io_context, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}, boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot> >(boost::asio::io_context&, thread_entry(boost::asio::cancellation_signal&, std::latch&)::{lambda()#1}&&, boost::asio::cancellation_slot_binder<void (*)(std::__exception_ptr::exception_ptr), boost::asio::cancellation_slot>&&, boost::asio::constraint<std::is_convertible<boost::asio::io_context&, boost::asio::execution_context&>::value, int>::type) <null> (a.out+0x407894) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#14 thread_entry(boost::asio::cancellation_signal&, std::latch&) <null> (a.out+0x40794e) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#15 void std::__invoke_impl<void, void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> >(std::__invoke_other, void (*&&)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>&&, std::reference_wrapper<std::latch>&&) <null> (a.out+0x4366a3) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#16 std::__invoke_result<void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> >::type std::__invoke<void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> >(void (*&&)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>&&, std::reference_wrapper<std::latch>&&) <null> (a.out+0x4363bb) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#17 void std::thread::_Invoker<std::tuple<void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> > >::_M_invoke<0ul, 1ul, 2ul>(std::_Index_tuple<0ul, 1ul, 2ul>) <null> (a.out+0x435eca) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#18 std::thread::_Invoker<std::tuple<void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> > >::operator()() <null> (a.out+0x43565c) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#19 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(boost::asio::cancellation_signal&, std::latch&), std::reference_wrapper<boost::asio::cancellation_signal>, std::reference_wrapper<std::latch> > > >::_M_run() <null> (a.out+0x433f02) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#20 execute_native_thread_routine <null> (libstdc++.so.6+0xe33c2) (BuildId: 135b17851e2f57f305c48a54822dfd08cdaf060e)
Thread T1 (tid=1476321, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.2+0x3e006) (BuildId: 66cad9ec271b9ca10171b0eb35058d43560b9843)
#1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) <null> (libstdc++.so.6+0xe3498) (BuildId: 135b17851e2f57f305c48a54822dfd08cdaf060e)
#2 CoSpawn_Cancel_Test::TestBody() <null> (a.out+0x407a2e) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08)
#3 void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) [clone .constprop.0] <null> (libgtest.so.1.13.0+0x554a2) (BuildId: b5d53101d2632766c3089035f6f7f5d25cb01d4a)
SUMMARY: ThreadSanitizer: data race (/home/cbodley/test/signal_co_spawn/a.out+0x416449) (BuildId: dedd00f8e918744a2b9f4050041815205ac24d08) in boost::asio::cancellation_state::cancelled() const
==================
[ OK ] CoSpawn.Cancel (31 ms)
[----------] 1 test from CoSpawn (31 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (31 ms total)
[ PASSED ] 1 test.
ThreadSanitizer: reported 1 warnings
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment