segfault in `system_context`
ericniebler opened this issue · 1 comments
ericniebler commented
i was finally able to reproduce the crash that periodically causes the ststem_context
tests to fail. to reproduce this, i had to force the static_thread_pool
to only launch 2 threads. i also defined STDEXEC_SYSTEM_CONTEXT_HEADER_ONLY
; i'm not sure if that had anything to do with it.
@lucteo, do you have any ideas about this?
this is the crash:
Thread 2 "example.hello_w" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff49ff640 (LWP 1076208)]
0x0000555555701080 in exec::__system_context_default_impl::__operation<exec::_pool_::static_thread_pool_::scheduler::_sender>::__destruct (this=0xbebebebebebebebe) at /home/eniebler/Code/stdexec/include/exec/__detail/__system_context_default_impl.hpp:80
80 if (__on_heap_) {
the this
pointer is obvious garbage. here's the backtrace i got:
exec::__system_context_default_impl::__operation<exec::_pool_::static_thread_pool_::scheduler::_sender>::__destruct(exec::__system_context_default_impl::__operation<exec::_pool_::static_thread_pool_::scheduler::_sender> * this) (/home/eniebler/Code/stdexec/include/exec/__detail/__system_context_default_impl.hpp:80)
exec::__system_context_default_impl::__system_scheduler_impl::__destruct_schedule_operation_impl(void * __operation) (/home/eniebler/Code/stdexec/include/exec/__detail/__system_context_default_impl.hpp:152)
exec::__detail::__system_op<exec::system_sender, stdexec::__detail::__receiver<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >, stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#18}{}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*) [1]>::__t>::~__system_op()(exec::__detail::__system_op<exec::system_sender, stdexec::__detail::__receiver<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >, stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*)[1]>::__t> * this) (/home/eniebler/Code/stdexec/include/exec/system_context.hpp:152)
stdexec::__tup::__box<exec::__detail::__system_op<exec::system_sender, stdexec::__detail::__receiver<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >, stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#18}{}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*) [1]>::__t>, 0ul>::~__box()(stdexec::__tup::__box<exec::__detail::__system_op<exec::system_sender, stdexec::__detail::__receiver<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >, stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*)[1]>::__t>, 0UL> * this) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__tuple.hpp:28)
stdexec::__tup::__tuple<(stdexec::__pack::__t<0ul>*)0, exec::__detail::__system_op<exec::system_sender, stdexec::__detail::__receiver<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >, stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#18}{}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*) [1]>::__t> >::~__tuple()(stdexec::__tup::__tuple<nullptr, exec::__detail::__system_op<exec::system_sender, stdexec::__detail::__receiver<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >, stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*)[1]>::__t> > * this) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__tuple.hpp:56)
stdexec::__detail::__op_state<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#18}{}, stdexec::(anonymous namespace)::__anon>, exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t>::~__op_state()(stdexec::__detail::__op_state<stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t> * this) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:320)
exec::__scope::__nest_op<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#16}{}, stdexec::(anonymous namespace)::__anon>, exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t::~__t()(exec::__scope::__nest_op<stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t * this) (/home/eniebler/Code/stdexec/include/exec/async_scope.hpp:211)
exec::__scope::__spawn_op<exec::__scope::__nest_sender<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#16}{}, stdexec::(anonymous namespace)::__anon> >, stdexec::__env::empty_env>::__t::~__t()(exec::__scope::__spawn_op<exec::__scope::__nest_sender<stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon> >, stdexec::__env::empty_env>::__t * this) (/home/eniebler/Code/stdexec/include/exec/async_scope.hpp:726)
exec::__scope::__spawn_op<exec::__scope::__nest_sender<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#16}{}, stdexec::(anonymous namespace)::__anon> >, stdexec::__env::empty_env>::__t::__t<exec::__scope::__nest_sender<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#16}{}, stdexec::(anonymous namespace)::__anon> >::__t>(exec::__scope::__nest_sender<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#16}{}, stdexec::(anonymous namespace)::__anon> >::__t&&, stdexec::__env::empty_env, exec::__scope::__impl const*)::{lambda(exec::__scope::__spawn_op_base<stdexec::__env::empty_env>*)#1}::operator()(exec::__scope::__spawn_op_base<stdexec::__env::empty_env>*) const(const class {...} * this, exec::__scope::__spawn_op_base<stdexec::__env::empty_env> * __op) (/home/eniebler/Code/stdexec/include/exec/async_scope.hpp:732)
exec::__scope::__spawn_op<exec::__scope::__nest_sender<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#16}{}, stdexec::(anonymous namespace)::__anon> >, stdexec::__env::empty_env>::__t::__t<exec::__scope::__nest_sender<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#16}{}, stdexec::(anonymous namespace)::__anon> >::__t>(exec::__scope::__nest_sender<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#16}{}, stdexec::(anonymous namespace)::__anon> >::__t&&, stdexec::__env::empty_env, exec::__scope::__impl const*)::{lambda(exec::__scope::__spawn_op_base<stdexec::__env::empty_env>*)#1}::__invoke(exec::__scope::__spawn_op_base<stdexec::__env::empty_env>*)(exec::__scope::__spawn_op_base<stdexec::__env::empty_env> * __op) (/home/eniebler/Code/stdexec/include/exec/async_scope.hpp:731)
exec::__scope::__spawn_rcvr<stdexec::__env::empty_env>::__t::set_value(exec::__scope::__spawn_rcvr<stdexec::__env::empty_env>::__t * this) (/home/eniebler/Code/stdexec/include/exec/async_scope.hpp:699)
exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t::set_value<>()(exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t * this) (/home/eniebler/Code/stdexec/include/exec/async_scope.hpp:172)
stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler>::set_value<>()(stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler> * this) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__let.hpp:102)
stdexec::__set_value_invoke<true, stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler>, main::$_0::operator()(std::stop_token) const::{lambda()#1}>(stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler>&&, main::$_0::operator()(std::stop_token) const::{lambda()#1}&&)(stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler> && __rcvr, class {...} && __fun) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__receivers.hpp:190)
stdexec::__set_value_invoke<false, stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler>, main::$_0::operator()(std::stop_token) const::{lambda()#1}>(stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler>&&, main::$_0::operator()(std::stop_token) const::{lambda()#1}&&)(stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler> && __rcvr, class {...} && __fun) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__receivers.hpp:198)
_ZNK7stdexec6__then11__then_impl8completeMUlTyTyTyTpTyNS_8__ignoreERT0_RT1_T_DpOT2_E_clINS_7__rcvrs11set_value_tEZZ4mainENK3$_0clESt10stop_tokenEUlvE_NS_5__let21__receiver_with_schedIN4exec7__scope11__nest_rcvrINSM_12__spawn_rcvrINS_5__env9empty_envEEEE3__tENSL_16system_schedulerEEEJEEEvS3_S5_S7_S8_SB_(const class {...} * this, class {...} & __state, stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler> & __rcvr) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__then.hpp:88)
_ZZNK7stdexec6__just6__implINS0_6just_tEE5startMUlTyTyRT_RT0_E_clINS_5__tup7__tupleILPNS_6__pack3__tIJEEE0EJEEENS_8__detail10__receiverINS_3_IdINS_5__let21__receiver_with_schedIN4exec7__scope11__nest_rcvrINSO_12__spawn_rcvrINS_5__env9empty_envEEEE3__tENSN_16system_schedulerEEEEENS_7__sexprIXtlNS_12_GLOBAL__N_1UlvE13_EEENS10_6__anonEEEPA1_NS_8__mucharEE3__tEEEvS6_S8_ENKUlTpTyDpRT_E_clIJEEEDaS1B_(const class {...} * this) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__just.hpp:47)
_ZNK7stdexec6__just6__implINS0_6just_tEE5startMUlTyTyRT_RT0_E_clINS_5__tup7__tupleILPNS_6__pack3__tIJEEE0EJEEENS_8__detail10__receiverINS_3_IdINS_5__let21__receiver_with_schedIN4exec7__scope11__nest_rcvrINSO_12__spawn_rcvrINS_5__env9empty_envEEEE3__tENSN_16system_schedulerEEEEENS_7__sexprIXtlNS_12_GLOBAL__N_1UlvE13_EEENS10_6__anonEEEPA1_NS_8__mucharEE3__tEEEvS6_S8_(const class {...} * this, stdexec::__tup::__tuple<nullptr> & __state, stdexec::__detail::__receiver<stdexec::_Id<stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler> >, stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*)[1]>::__t & __rcvr) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__just.hpp:45)
_ZZNR7stdexec8__detail10__op_stateINS_7__sexprIXtlNS_12_GLOBAL__N_1UlvE8_EEENS3_6__anonEEENS0_10__receiverINS_3_IdINS_5__let21__receiver_with_schedIN4exec7__scope11__nest_rcvrINSC_12__spawn_rcvrINS_5__env9empty_envEEEE3__tENSB_16system_schedulerEEEEENS2_IXtlNS3_UlvE13_EEES5_EEPA1_NS_8__mucharEE3__tEE5startEvENKUlDpRT_E_clIJEEEDaSX_(const class {...} * this) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:352)
_ZNK7stdexec8__detail7__startMUlTyTpTyNS_8__ignoreES2_DpRT0_E_clINS_7__start7start_tEJNS0_10__op_stateINS_7__sexprIXtlNS_12_GLOBAL__N_1UlvE8_EEENSC_6__anonEEENS0_10__receiverINS_3_IdINS_5__let21__receiver_with_schedIN4exec7__scope11__nest_rcvrINSL_12__spawn_rcvrINS_5__env9empty_envEEEE3__tENSK_16system_schedulerEEEEENSB_IXtlNSC_UlvE13_EEESE_EEPA1_NS_8__mucharEE3__tEEEEEEDaS2_S2_S5_(const class {...} * this, stdexec::__detail::__op_state<stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, stdexec::__detail::__receiver<stdexec::_Id<stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler> >, stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*)[1]>::__t> & __ops) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:143)
_ZZNR7stdexec8__detail10__op_stateINS_7__sexprIXtlNS_12_GLOBAL__N_1UlvE13_EEENS3_6__anonEEENS_5__let21__receiver_with_schedIN4exec7__scope11__nest_rcvrINSA_12__spawn_rcvrINS_5__env9empty_envEEEE3__tENS9_16system_schedulerEEEE5startEvENKUlDpRT_E_clIJNS1_INS2_IXtlNS3_UlvE8_EEES5_EENS0_10__receiverINS_3_IdISJ_EES6_PA1_NS_8__mucharEE3__tEEEEEEDaSN_(const class {...} * this, stdexec::__detail::__op_state<stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, stdexec::__detail::__receiver<stdexec::_Id<stdexec::__let::__receiver_with_sched<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, exec::system_scheduler> >, stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*)[1]>::__t> & __ops) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:352)
stdexec::__let::__let_impl<stdexec::__rcvrs::set_value_t, stdexec::default_domain>::__bind_<stdexec::__let::__let_state<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, stdexec::__detail::__always<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#15}{}, stdexec::(anonymous namespace)::__anon>, stdexec::__basic_sender<stdexec::__then::then_t, main::$_0::operator()(std::stop_token) const::{lambda()#1}, stdexec::__basic_sender<stdexec::__just::just_t, stdexec::__tup::__tuple<(stdexec::__pack::__t<>*)0> > > >, stdexec::__rcvrs::set_value_t, exec::system_scheduler, stdexec::__tup::__tuple<(stdexec::__pack::__t<>*)0> >, stdexec::__detail::__op_state<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#18}{}, stdexec::(anonymous namespace)::__anon>, exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t>>(stdexec::__let::__let_state<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, stdexec::__detail::__always<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#15}{}, stdexec::(anonymous namespace)::__anon>, stdexec::__basic_sender<stdexec::__then::then_t, main::$_0::operator()(std::stop_token) const::{lambda()#1}, stdexec::__basic_sender<stdexec::__just::just_t, stdexec::__tup::__tuple<(stdexec::__pack::__t<>*)0> > > >, stdexec::__rcvrs::set_value_t, exec::system_scheduler, stdexec::__tup::__tuple<(stdexec::__pack::__t<>*)0> >&, stdexec::__detail::__op_state<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#18}{}, stdexec::(anonymous namespace)::__anon>, exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t>&)(stdexec::__let::__let_state<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t, stdexec::__detail::__always<stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, stdexec::__basic_sender<stdexec::__then::then_t, (lambda at /home/eniebler/Code/stdexec/examples/hello_world.cpp:50:43), stdexec::__basic_sender<stdexec::__just::just_t, stdexec::__tup::__tuple<nullptr> > > >, stdexec::__rcvrs::set_value_t, exec::system_scheduler, stdexec::__tup::__tuple<nullptr> > & __state, stdexec::__detail::__op_state<stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t> & __op_state) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__let.hpp:482)
stdexec::__let::__let_impl<stdexec::__rcvrs::set_value_t, stdexec::default_domain>::__bind<stdexec::__detail::__op_state<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#18}{}, stdexec::(anonymous namespace)::__anon>, exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t>>(stdexec::__detail::__op_state<stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#18}{}, stdexec::(anonymous namespace)::__anon>, exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t>&)(stdexec::__detail::__op_state<stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t> & __op_state) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__let.hpp:500)
_ZNK7stdexec5__let10__let_implINS_7__rcvrs11set_value_tENS_14default_domainEE8completeMUlTyTyTpTyNS_8__ignoreERT_T0_DpOT1_E_clINS_8__detail10__op_stateINS_7__sexprIXtlNS_12_GLOBAL__N_1UlvE16_EEENSJ_6__anonEEEN4exec7__scope11__nest_rcvrINSO_12__spawn_rcvrINS_5__env9empty_envEEEE3__tEEES3_JEEEvS7_S9_SA_SD_(const class {...} * this, stdexec::__detail::__op_state<stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >::__t> & __op_state) (/home/eniebler/Code/stdexec/include/stdexec/__detail/__let.hpp:518)
exec::__detail::__pass_to_receiver<stdexec::__detail::__receiver<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >, stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#18}{}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*) [1]>::__t>(int, void*, stdexec::__detail::__receiver<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >, stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#18}{}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*) [1]>::__t&&)(int __completion_type, void * __exception, stdexec::__detail::__receiver<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >, stdexec::__sexpr<stdexec::(anonymous namespace)::(lambda at /home/eniebler/Code/stdexec/include/stdexec/__detail/__basic_sender.hpp:54:9){}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*)[1]>::__t && __rcvr) (/home/eniebler/Code/stdexec/include/exec/system_context.hpp:54)
exec::__detail::__system_op<exec::system_sender, stdexec::__detail::__receiver<exec::__scope::__nest_rcvr<exec::__scope::__spawn_rcvr<stdexec::__env::empty_env> >, stdexec::__sexpr<stdexec::(anonymous namespace)::{lambda()#18}{}, stdexec::(anonymous namespace)::__anon>, stdexec::__muchar (*) [1]>::__t>::__cb(void*, int, void*)(void * __data, int __completion_type, void * __exception) (/home/eniebler/Code/stdexec/include/exec/system_context.hpp:168)
exec::__system_context_default_impl::__recv<exec::_pool_::static_thread_pool_::scheduler::_sender>::set_value(exec::__system_context_default_impl::__recv<exec::_pool_::static_thread_pool_::scheduler::_sender> * this) (/home/eniebler/Code/stdexec/include/exec/__detail/__system_context_default_impl.hpp:45)
exec::_pool_::static_thread_pool_::operation<stdexec::_Id<exec::__system_context_default_impl::__recv<exec::_pool_::static_thread_pool_::scheduler::_sender> > >::__t::__t(exec::_pool_::static_thread_pool_&, exec::_pool_::remote_queue*, exec::__system_context_default_impl::__recv<exec::_pool_::static_thread_pool_::scheduler::_sender>, unsigned long, exec::nodemask const&)::{lambda(exec::_pool_::task_base*, unsigned int)#1}::operator()(exec::_pool_::task_base*, unsigned int) const(const class {...} * this, exec::_pool_::task_base * t) (/home/eniebler/Code/stdexec/include/exec/static_thread_pool.hpp:1027)
exec::_pool_::static_thread_pool_::operation<stdexec::_Id<exec::__system_context_default_impl::__recv<exec::_pool_::static_thread_pool_::scheduler::_sender> > >::__t::__t(exec::_pool_::static_thread_pool_&, exec::_pool_::remote_queue*, exec::__system_context_default_impl::__recv<exec::_pool_::static_thread_pool_::scheduler::_sender>, unsigned long, exec::nodemask const&)::{lambda(exec::_pool_::task_base*, unsigned int)#1}::__invoke(exec::_pool_::task_base*, unsigned int)(exec::_pool_::task_base * t) (/home/eniebler/Code/stdexec/include/exec/static_thread_pool.hpp:1023)
exec::_pool_::static_thread_pool_::run(exec::_pool_::static_thread_pool_ * this, uint32_t threadIndex, exec::numa_policy * numa) (/home/eniebler/Code/stdexec/include/exec/static_thread_pool.hpp:709)
exec::_pool_::static_thread_pool_::static_thread_pool_(unsigned int, exec::bwos_params, exec::numa_policy*)::{lambda()#1}::operator()() const(const class {...} * this) (/home/eniebler/Code/stdexec/include/exec/static_thread_pool.hpp:680)
std::__invoke_impl<void, exec::_pool_::static_thread_pool_::static_thread_pool_(unsigned int, exec::bwos_params, exec::numa_policy*)::{lambda()#1}>(std::__invoke_other, exec::_pool_::static_thread_pool_::static_thread_pool_(unsigned int, exec::bwos_params, exec::numa_policy*)::{lambda()#1}&&)(class {...} && __f) (/usr/include/c++/13/bits/invoke.h:61)
std::__invoke<exec::_pool_::static_thread_pool_::static_thread_pool_(unsigned int, exec::bwos_params, exec::numa_policy*)::{lambda()#1}>(exec::_pool_::static_thread_pool_::static_thread_pool_(unsigned int, exec::bwos_params, exec::numa_policy*)::{lambda()#1}&&)(class {...} && __fn) (/usr/include/c++/13/bits/invoke.h:96)
std::thread::_Invoker<std::tuple<exec::_pool_::static_thread_pool_::static_thread_pool_(unsigned int, exec::bwos_params, exec::numa_policy*)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>)(std::thread::_Invoker<std::tuple<(lambda at /home/eniebler/Code/stdexec/include/exec/static_thread_pool.hpp:680:33)> > * this) (/usr/include/c++/13/bits/std_thread.h:292)
std::thread::_Invoker<std::tuple<exec::_pool_::static_thread_pool_::static_thread_pool_(unsigned int, exec::bwos_params, exec::numa_policy*)::{lambda()#1}> >::operator()()(std::thread::_Invoker<std::tuple<(lambda at /home/eniebler/Code/stdexec/include/exec/static_thread_pool.hpp:680:33)> > * this) (/usr/include/c++/13/bits/std_thread.h:299)
std::thread::_State_impl<std::thread::_Invoker<std::tuple<exec::_pool_::static_thread_pool_::static_thread_pool_(unsigned int, exec::bwos_params, exec::numa_policy*)::{lambda()#1}> > >::_M_run()(std::thread::_State_impl<std::thread::_Invoker<std::tuple<(lambda at /home/eniebler/Code/stdexec/include/exec/static_thread_pool.hpp:680:33)> > > * this) (/usr/include/c++/13/bits/std_thread.h:244)
libstdc++.so.6![Unknown/Just-In-Time compiled code] (Unknown Source:0)
asan_thread_start(void*) (Unknown Source:0)
libc.so.6!start_thread(void * arg) (pthread_create.c:442)
libc.so.6!clone3() (clone3.S:81)
ericniebler commented
this part looks deeply suspicious. __destruct_schedule_operation_impl
takes two pointer arguments, not one.
__system_context_default_impl::__system_scheduler_impl::__destruct_schedule_operation_impl(void * __operation)