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)
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.