beast: Soft mutex assertion fail in Websocket

I’ve found this issue in BOOST_BEAST_VERSION 277

I’m getting assertion fail in

template<class T>
    void
    unlock(T const*)
    {
        BOOST_ASSERT(id_ == T::id);
        id_ = 0;
    }

Stacktrace for the fail:

Exchanges.exe!boost::beast::websocket::detail::soft_mutex::unlock<boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>(const boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1> * __formal) Line 75
	at G:\boost\boost_1_72_0\boost\beast\websocket\detail\soft_mutex.hpp(75)
Exchanges.exe!boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>::operator()(boost::system::error_code ec, unsigned __int64 bytes_transferred, bool cont) Line 428
	at G:\boost\boost_1_72_0\boost\beast\websocket\impl\write.hpp(428)
Exchanges.exe!boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>::operator()(const boost::system::error_code & ec, unsigned __int64 bytes_transferred, int start) Line 340
	at G:\boost\boost_1_72_0\boost\asio\impl\write.hpp(340)
Exchanges.exe!boost::beast::async_base<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>,boost::asio::executor,std::allocator<void>>::complete_now<boost::system::error_code &,unsigned __int64 &>(boost::system::error_code & <args_0>, unsigned __int64 & <args_1>) Line 382
	at G:\boost\boost_1_72_0\boost\beast\core\async_base.hpp(382)
Exchanges.exe!boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>::operator()(boost::system::error_code ec, unsigned __int64 bytes_transferred) Line 73
	at G:\boost\boost_1_72_0\boost\beast\core\impl\flat_stream.hpp(73)
Exchanges.exe!boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>::call_handler<boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>(boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>> & handler, const boost::system::error_code & ec, const unsigned __int64 & bytes_transferred) Line 56
	at G:\boost\boost_1_72_0\boost\asio\ssl\detail\write_op.hpp(56)
Exchanges.exe!boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>,boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>::operator()(boost::system::error_code ec, unsigned __int64 bytes_transferred, int start) Line 276
	at G:\boost\boost_1_72_0\boost\asio\ssl\detail\io.hpp(276)
Exchanges.exe!boost::asio::detail::write_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::mutable_buffer,boost::asio::mutable_buffer const *,boost::asio::detail::transfer_all_t,boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>,boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>>::operator()(const boost::system::error_code & ec, unsigned __int64 bytes_transferred, int start) Line 340
	at G:\boost\boost_1_72_0\boost\asio\impl\write.hpp(340)
Exchanges.exe!boost::beast::async_base<boost::asio::detail::write_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::mutable_buffer,boost::asio::mutable_buffer const *,boost::asio::detail::transfer_all_t,boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>,boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>>,boost::asio::executor,std::allocator<void>>::complete_now<boost::system::error_code &,unsigned __int64 &>(boost::system::error_code & <args_0>, unsigned __int64 & <args_1>) Line 382
	at G:\boost\boost_1_72_0\boost\beast\core\async_base.hpp(382)
Exchanges.exe!boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>::ops::transfer_op<0,boost::asio::const_buffers_1,boost::asio::detail::write_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::mutable_buffer,boost::asio::mutable_buffer const *,boost::asio::detail::transfer_all_t,boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>,boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>>>::operator()(boost::system::error_code ec, unsigned __int64 bytes_transferred) Line 381
	at G:\boost\boost_1_72_0\boost\beast\core\impl\basic_stream.hpp(381)
Exchanges.exe!boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>::ops::transfer_op<0,boost::asio::const_buffers_1,boost::asio::detail::write_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::mutable_buffer,boost::asio::mutable_buffer const *,boost::asio::detail::transfer_all_t,boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>,boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>>>,boost::system::error_code,unsigned __int64>::operator()() Line 166
	at G:\boost\boost_1_72_0\boost\asio\detail\bind_handler.hpp(166)
Exchanges.exe!boost::asio::detail::executor_function<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>::ops::transfer_op<0,boost::asio::const_buffers_1,boost::asio::detail::write_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::mutable_buffer,boost::asio::mutable_buffer const *,boost::asio::detail::transfer_all_t,boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>,boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>>>,boost::system::error_code,unsigned __int64>,std::allocator<void>>::do_complete(boost::asio::detail::executor_function_base * base, bool call) Line 91
	at G:\boost\boost_1_72_0\boost\asio\detail\executor_function.hpp(91)
Exchanges.exe!boost::asio::detail::executor_function_base::complete() Line 33
	at G:\boost\boost_1_72_0\boost\asio\detail\executor_function.hpp(33)
Exchanges.exe!boost::asio::executor::function::operator()() Line 71
	at G:\boost\boost_1_72_0\boost\asio\impl\executor.hpp(71)
Exchanges.exe!boost::asio::asio_handler_invoke<boost::asio::executor::function>(boost::asio::executor::function & function, ...) Line 70
	at G:\boost\boost_1_72_0\boost\asio\handler_invoke_hook.hpp(70)
Exchanges.exe!boost_asio_handler_invoke_helpers::invoke<boost::asio::executor::function,boost::asio::executor::function>(boost::asio::executor::function & function, boost::asio::executor::function & context) Line 39
	at G:\boost\boost_1_72_0\boost\asio\detail\handler_invoke_helpers.hpp(39)
Exchanges.exe!boost::asio::io_context::executor_type::dispatch<boost::asio::executor::function,std::allocator<void>>(boost::asio::executor::function && f, const std::allocator<void> & a) Line 265
	at G:\boost\boost_1_72_0\boost\asio\impl\io_context.hpp(265)
Exchanges.exe!boost::asio::executor::impl<boost::asio::io_context::executor_type,std::allocator<void>>::dispatch(boost::asio::executor::function && f) Line 185
	at G:\boost\boost_1_72_0\boost\asio\impl\executor.hpp(185)
Exchanges.exe!boost::asio::executor::dispatch<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>::ops::transfer_op<0,boost::asio::const_buffers_1,boost::asio::detail::write_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::mutable_buffer,boost::asio::mutable_buffer const *,boost::asio::detail::transfer_all_t,boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>,boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>>>,boost::system::error_code,unsigned __int64>,std::allocator<void>>(boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>::ops::transfer_op<0,boost::asio::const_buffers_1,boost::asio::detail::write_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::mutable_buffer,boost::asio::mutable_buffer const *,boost::asio::detail::transfer_all_t,boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>,boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>>>,boost::system::error_code,unsigned __int64> && f, const std::allocator<void> & a) Line 351
	at G:\boost\boost_1_72_0\boost\asio\impl\executor.hpp(351)
Exchanges.exe!??@82edbc8bc0e1ca2ce9e040e6eef19c10@(boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>::ops::transfer_op<0,boost::asio::const_buffers_1,boost::asio::detail::write_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::mutable_buffer,boost::asio::mutable_buffer const *,boost::asio::detail::transfer_all_t,boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>,boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>>>,boost::system::error_code,unsigned __int64> & function, boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>::ops::transfer_op<0,boost::asio::const_buffers_1,boost::asio::detail::write_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::mutable_buffer,boost::asio::mutable_buffer const *,boost::asio::detail::transfer_all_t,boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>,boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>>> & handler) Line 74
	at G:\boost\boost_1_72_0\boost\asio\detail\handler_work.hpp(74)
Exchanges.exe!boost::asio::detail::win_iocp_socket_send_op<boost::beast::buffers_prefix_view<boost::asio::const_buffers_1>,boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>::ops::transfer_op<0,boost::asio::const_buffers_1,boost::asio::detail::write_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::mutable_buffer,boost::asio::mutable_buffer const *,boost::asio::detail::transfer_all_t,boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>,boost::asio::ssl::detail::write_op<boost::asio::mutable_buffer>,boost::beast::flat_stream<boost::asio::ssl::stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>>::ops::write_op<boost::asio::detail::write_op<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>,boost::beast::buffers_cat_view<boost::asio::mutable_buffer,boost::asio::mutable_buffers_1>::const_iterator,boost::asio::detail::transfer_all_t,boost::beast::websocket::stream<boost::beast::ssl_stream<boost::beast::basic_stream<boost::asio::ip::tcp,boost::asio::executor,boost::beast::unlimited_rate_policy>>,1>::write_some_op<void <lambda>(boost::system::error_code, unsigned __int64),boost::asio::mutable_buffers_1>>>>>>,boost::asio::detail::io_object_executor<boost::asio::executor>>::do_complete(void * owner, boost::asio::detail::win_iocp_operation * base, const boost::system::error_code & result_ec, unsigned __int64 bytes_transferred) Line 96
	at G:\boost\boost_1_72_0\boost\asio\detail\win_iocp_socket_send_op.hpp(96)
Exchanges.exe!boost::asio::detail::win_iocp_operation::complete(void * owner, const boost::system::error_code & ec, unsigned __int64 bytes_transferred) Line 48
	at G:\boost\boost_1_72_0\boost\asio\detail\win_iocp_operation.hpp(48)
Exchanges.exe!boost::asio::detail::win_iocp_io_context::do_one(unsigned long msec, boost::system::error_code & ec) Line 460
	at G:\boost\boost_1_72_0\boost\asio\detail\impl\win_iocp_io_context.ipp(460)
Exchanges.exe!boost::asio::detail::win_iocp_io_context::run(boost::system::error_code & ec) Line 202
	at G:\boost\boost_1_72_0\boost\asio\detail\impl\win_iocp_io_context.ipp(202)
Exchanges.exe!boost::asio::io_context::run() Line 63
	at G:\boost\boost_1_72_0\boost\asio\impl\io_context.ipp(63)

Looks like the thread unlocks the mutex, than it unlocks it again. The issue occurs randomly with low frequency

I’ve checked some locals in

template<class NextLayer, bool deflateSupported>
template<class Buffers, class Handler>
void
stream<NextLayer, deflateSupported>::
write_some_op<Buffers, Handler>::
operator()(

how_ =2 impl.check_stop_now(ec) = false remain_=0 bytes_transferred_=90 n=14757395258967641292

all of if( impl.op_close.maybe_invoke() || impl.op_idle_ping.maybe_invoke() || impl.op_rd.maybe_invoke() || impl.op_ping.maybe_invoke())

are false

looks like it acquired the lock, than did the cycle, went to upcall and found that the lock is not locked

Can the issue be that in soft_mutex,

int id_ = 0;

is not atomic?

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 17 (5 by maintainers)

Most upvoted comments

I don’t know of any. I learned by examining example programs and doing experiments, plus reading all the stuff there is on the web such as blogs and what not.