`experimental::coro` causes invalid free
Yielding a struct with one single std::string as a member causes to program to crash if the value is constructed in-place:
// crash:
co_yield My_struct{ "some string" };
// no crash:
My_struct s{ "some string" };
co_yield s;
Some information about my setup:
- CMake 3.22.1
- GCC 12.0.1
- Boost 1.79.0
I have prepared an example which should showcase this behaviour (when setting working_solution to true or just yielding a std::string, the problem doesn't occur):
main.cpp:
#include <boost/asio.hpp>
#include <boost/asio/experimental/coro.hpp>
#include <string>
#include <iostream>
using namespace boost::asio;
using namespace experimental;
struct Wrapper {
std::string msg;
};
inline coro<Wrapper> my_coro(boost::asio::any_io_executor)
{
constexpr bool working_solution = false;
while (true) {
if (working_solution) {
Wrapper w{ "hi" };
co_yield w;
} else {
co_yield Wrapper{ "hi" };
}
}
co_return;
}
int main()
{
io_service service;
co_spawn(service, [&]() -> awaitable<void> {
auto gen = my_coro(service.get_executor());
while (gen.is_open()) {
auto w = co_await gen.async_resume(use_awaitable);
if (!w.has_value()) {
break;
}
std::cout << "Value: " << w->msg << "\n";
}
}, detached);
service.run();
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(coro_test)
set(CMAKE_CXX_STANDARD 20)
include(FetchContent)
FetchContent_Declare(
Boost
URL https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/boost_1_79_0.tar.gz
URL_HASH SHA256=273f1be93238a068aba4f9735a4a2b003019af067b9c183ed227780b8f36062c
)
FetchContent_MakeAvailable(Boost)
FetchContent_GetProperties(Boost SOURCE_DIR Boost_INCLUDE_DIR)
find_package(Boost REQUIRED)
add_executable(coro_test main.cpp)
target_link_libraries(coro_test PRIVATE Boost::boost)
Dockerfile
FROM ubuntu:22.04
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y g++-12 cmake
You can run this example with the following commands:
# or docker
podman build . -t coro-test
podman run --rm -i -t -v $PWD:/app coro-test bash -c 'cd app; CXX=g++-12 cmake -S . -B build; cmake --build build; ./build/coro_test'
@chriskohlhoff
Does not reproduce with clang14. Reproduces with gcc 12/11/10
This looks odd, given that the code for yielding is very similar:
auto yield_value(const YieldReturn& y)
{
result_ = y;
return yield_input<void>{std::exchange(awaited_from, std::noop_coroutine())};
}
auto yield_value(YieldReturn&& y)
{
result_ = std::move(y);
return yield_input<void>{std::exchange(awaited_from, std::noop_coroutine())};
}
Can I get a stack-trace?
This is the output with the -fsanitize=address option:
Value: hi
=================================================================
==1359==ERROR: AddressSanitizer: attempting free on address which was not malloc()-ed: 0x613000000190 in thread T0
#0 0x7f2be50dc520 in operator delete(void*, unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:164
#1 0x5614efe79bac in std::__new_allocator<char>::deallocate(char*, unsigned long) /usr/include/c++/12/bits/new_allocator.h:158
#2 0x5614efe7085c in std::allocator<char>::deallocate(char*, unsigned long) /usr/include/c++/12/bits/allocator.h:195
#3 0x5614efe7085c in std::allocator_traits<std::allocator<char> >::deallocate(std::allocator<char>&, char*, unsigned long) /usr/include/c++/12/bits/alloc_traits.h:496
#4 0x5614efe6d97f in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_destroy(unsigned long) /usr/include/c++/12/bits/basic_string.h:293
#5 0x5614efe69e70 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_dispose() /usr/include/c++/12/bits/basic_string.h:287
#6 0x5614efe63517 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string() /usr/include/c++/12/bits/basic_string.h:795
#7 0x5614efe62549 in Wrapper::~Wrapper() /workspaces/asd/main.cpp:9
#8 0x5614efe6f67e in std::_Optional_payload_base<Wrapper>::_M_destroy() /usr/include/c++/12/optional:285
#9 0x5614efe6c52c in std::_Optional_payload_base<Wrapper>::_M_reset() /usr/include/c++/12/optional:316
#10 0x5614efe6841d in std::_Optional_payload<Wrapper, false, false, false>::~_Optional_payload() /usr/include/c++/12/optional:437
#11 0x5614efe6270f in std::_Optional_base<Wrapper, false, false>::~_Optional_base() /usr/include/c++/12/optional:508
#12 0x5614efe6272f in std::optional<Wrapper>::~optional() /usr/include/c++/12/optional:703
#13 0x5614efe473a7 in operator() /workspaces/asd/main.cpp:39
#14 0x5614efe6042d in std::__n4861::coroutine_handle<void>::resume() const /usr/include/c++/12/coroutine:135
#15 0x5614efe7bf7b in boost::asio::detail::awaitable_frame_base<boost::asio::any_io_executor>::resume() /workspaces/asd/build/_deps/boost-src/boost/asio/impl/awaitable.hpp:455
#16 0x5614efe79a12 in boost::asio::detail::awaitable_thread<boost::asio::any_io_executor>::pump() /workspaces/asd/build/_deps/boost-src/boost/asio/impl/awaitable.hpp:713
#17 0x5614efe783b9 in void boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >::operator()<std::optional<Wrapper> >(std::__exception_ptr::exception_ptr, std::optional<Wrapper>&&) /workspaces/asd/build/_deps/boost-src/boost/asio/impl/use_awaitable.hpp:173
#18 0x5614efe74859 in boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}::operator()() /workspaces/asd/build/_deps/boost-src/boost/asio/experimental/impl/coro.hpp:1144
#19 0x5614efe8deef in boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>::operator()() /workspaces/asd/build/_deps/boost-src/boost/asio/detail/bind_handler.hpp:60
#20 0x5614efe8f551 in void boost::asio::asio_handler_invoke<boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}> >(boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>&, ...) /workspaces/asd/build/_deps/boost-src/boost/asio/handler_invoke_hook.hpp:88
#21 0x5614efe8f3a3 in void boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>, boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>(boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>&, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/handler_invoke_helpers.hpp:54
#22 0x5614efe8f04b in void boost::asio::detail::asio_handler_invoke<boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>, boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>(boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>&, boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>*) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/bind_handler.hpp:111
#23 0x5614efe8ed8e in void boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>, boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}> >(boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>&, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/handler_invoke_helpers.hpp:54
#24 0x5614efe8e3be in void boost::asio::detail::executor_function::complete<boost::asio::detail::binder0<boost::asio::experimental::coro<Wrapper, void, boost::asio::any_io_executor>::initiate_async_resume::handle<boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> > >(boost::asio::any_io_executor, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor, std::__exception_ptr::exception_ptr, std::optional<Wrapper> >&&, std::integral_constant<bool, false>, std::integral_constant<bool, false>)::{lambda()#1}::operator()()::{lambda()#4}>, std::allocator<void> >(boost::asio::detail::executor_function::impl_base*, bool) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/executor_function.hpp:116
#25 0x5614efe50dce in boost::asio::detail::executor_function::operator()() /workspaces/asd/build/_deps/boost-src/boost/asio/detail/executor_function.hpp:64
#26 0x5614efe839c9 in void boost::asio::asio_handler_invoke<boost::asio::detail::executor_function>(boost::asio::detail::executor_function&, ...) /workspaces/asd/build/_deps/boost-src/boost/asio/handler_invoke_hook.hpp:88
#27 0x5614efe80317 in void boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::executor_function, boost::asio::detail::executor_function>(boost::asio::detail::executor_function&, boost::asio::detail::executor_function&) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/handler_invoke_helpers.hpp:54
#28 0x5614efe83fba in 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) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/executor_op.hpp:70
#29 0x5614efe57030 in boost::asio::detail::scheduler_operation::complete(void*, boost::system::error_code const&, unsigned long) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/scheduler_operation.hpp:40
#30 0x5614efe5f143 in 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&) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/impl/scheduler.ipp:492
#31 0x5614efe5e5ab in boost::asio::detail::scheduler::run(boost::system::error_code&) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/impl/scheduler.ipp:210
#32 0x5614efe61673 in boost::asio::io_context::run() /workspaces/asd/build/_deps/boost-src/boost/asio/impl/io_context.ipp:63
#33 0x5614efe47d00 in main /workspaces/asd/main.cpp:42
#34 0x7f2be4ae9d8f (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f)
#35 0x7f2be4ae9e3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e3f)
#36 0x5614efe45e84 in _start (/workspaces/asd/build/coro_test+0xae84)
0x613000000190 is located 336 bytes inside of 368-byte region [0x613000000040,0x6130000001b0)
allocated by thread T0 here:
#0 0x7f2be50db478 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
#1 0x5614efe628a9 in my_coro(boost::asio::any_io_executor) /workspaces/asd/main.cpp:25
#2 0x5614efe4707a in operator() /workspaces/asd/main.cpp:32
#3 0x5614efe6042d in std::__n4861::coroutine_handle<void>::resume() const /usr/include/c++/12/coroutine:135
#4 0x5614efe7bf7b in boost::asio::detail::awaitable_frame_base<boost::asio::any_io_executor>::resume() /workspaces/asd/build/_deps/boost-src/boost/asio/impl/awaitable.hpp:455
#5 0x5614efe79a12 in boost::asio::detail::awaitable_thread<boost::asio::any_io_executor>::pump() /workspaces/asd/build/_deps/boost-src/boost/asio/impl/awaitable.hpp:713
#6 0x5614efe8ee4f in boost::asio::detail::awaitable_handler<boost::asio::any_io_executor>::operator()() /workspaces/asd/build/_deps/boost-src/boost/asio/impl/use_awaitable.hpp:73
#7 0x5614efe8e519 in boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >::operator()() /workspaces/asd/build/_deps/boost-src/boost/asio/detail/bind_handler.hpp:60
#8 0x5614efe8f5f0 in void boost::asio::asio_handler_invoke<boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> > >(boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >&, ...) /workspaces/asd/build/_deps/boost-src/boost/asio/handler_invoke_hook.hpp:88
#9 0x5614efe8f47c in void boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >(boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >&, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor>&) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/handler_invoke_helpers.hpp:54
#10 0x5614efe8f123 in void boost::asio::detail::asio_handler_invoke<boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >, boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >(boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >&, boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >*) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/bind_handler.hpp:111
#11 0x5614efe8eed3 in void boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >, boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> > >(boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >&, boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >&) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/handler_invoke_helpers.hpp:54
#12 0x5614efe8e9f0 in void boost::asio::detail::executor_function::complete<boost::asio::detail::binder0<boost::asio::detail::awaitable_handler<boost::asio::any_io_executor> >, std::allocator<void> >(boost::asio::detail::executor_function::impl_base*, bool) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/executor_function.hpp:116
#13 0x5614efe50dce in boost::asio::detail::executor_function::operator()() /workspaces/asd/build/_deps/boost-src/boost/asio/detail/executor_function.hpp:64
#14 0x5614efe839c9 in void boost::asio::asio_handler_invoke<boost::asio::detail::executor_function>(boost::asio::detail::executor_function&, ...) /workspaces/asd/build/_deps/boost-src/boost/asio/handler_invoke_hook.hpp:88
#15 0x5614efe80317 in void boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::executor_function, boost::asio::detail::executor_function>(boost::asio::detail::executor_function&, boost::asio::detail::executor_function&) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/handler_invoke_helpers.hpp:54
#16 0x5614efe83fba in 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) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/executor_op.hpp:70
#17 0x5614efe57030 in boost::asio::detail::scheduler_operation::complete(void*, boost::system::error_code const&, unsigned long) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/scheduler_operation.hpp:40
#18 0x5614efe5f143 in 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&) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/impl/scheduler.ipp:492
#19 0x5614efe5e5ab in boost::asio::detail::scheduler::run(boost::system::error_code&) /workspaces/asd/build/_deps/boost-src/boost/asio/detail/impl/scheduler.ipp:210
#20 0x5614efe61673 in boost::asio::io_context::run() /workspaces/asd/build/_deps/boost-src/boost/asio/impl/io_context.ipp:63
#21 0x5614efe47d00 in main /workspaces/asd/main.cpp:42
#22 0x7f2be4ae9d8f (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f)
SUMMARY: AddressSanitizer: bad-free ../../../../src/libsanitizer/asan/asan_new_delete.cpp:164 in operator delete(void*, unsigned long)
==1359==ABORTING
Closing this issue since it's most likely a bug in GCC. There are several bug reports on GCC's bugzilla like this. Nonetheless thanks for the help. Cheers