asio icon indicating copy to clipboard operation
asio copied to clipboard

`experimental::coro` causes invalid free

Open terrakuh opened this issue 3 years ago • 4 comments

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'

terrakuh avatar Jun 12 '22 19:06 terrakuh

@chriskohlhoff

terrakuh avatar Jun 13 '22 15:06 terrakuh

Does not reproduce with clang14. Reproduces with gcc 12/11/10

andrei-datcu avatar Jul 01 '22 14:07 andrei-datcu

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?

klemens-morgenstern avatar Jul 03 '22 06:07 klemens-morgenstern

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

terrakuh avatar Jul 04 '22 16:07 terrakuh

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

terrakuh avatar Nov 25 '22 19:11 terrakuh