Note that there are some explanatory texts on larger screens.

plurals
  1. POUsing boost's SSL asio code, async_write_some hangs
    primarykey
    data
    text
    <p>I have some multi-threaded code that uses Boost's SSL ASIO library. The code is multi-threaded, but there's a mutex associated with each SSL connection and calls to <code>async_*</code> functions are done holding the mutex.</p> <p>I sometimes see my code grind to a halt. There's a stuck thread. The thread is stuck in <code>bio_write</code>. The stack trace looks this:</p> <pre><code>#0 0x00000000010a974f in bio_write () #1 0x00000000010a3529 in BIO_write () #2 0x000000000105fe72 in ssl3_write_pending () #3 0x0000000001060b02 in ssl3_write_bytes () #4 0x0000000000cce43a in boost::asio::ssl::detail::engine::do_write (this=0x1e618a0, data=0x234c7b0, length=189) at /usr/include/boost/asio/ssl/detail/impl/engine.ipp:294 #5 0x0000000000cce109 in boost::asio::ssl::detail::engine::perform(this=0x1e618a0, op=(int (boost::asio::ssl::detail::engine::*)(boost::asio::ssl::detail::engine * const, void *, std::size_t)) 0xcce3fc&lt;boost::asio::ssl::detail::engine::do_write(void*, unsigned long)&gt;, data=0x234c7b0, length=189, ec=..., bytes_transferred=0x7fff8ad74d48) at /usr/include/boost/asio/ssl/detail/impl/engine.ipp:219 #6 0x0000000000ccdd23 in boost::asio::ssl::detail::engine::write (this=0x1e618a0, data=..., ec=..., bytes_transferred=@0x7fff8ad74d48: 0) at /usr/include/boost/asio/ssl/detail/impl/engine.ipp:137 #7 0x0000000000dac504 in boost::asio::ssl::detail::write_op&lt;boost::asio::mutable_buffers_1&gt;::operator() (this=0x7fff8ad74d20, eng=..., ec=..., bytes_transferred=@0x7fff8ad74d48: 0) at /usr/include/boost/asio/ssl/detail/write_op.hpp:51 #8 0x0000000000da9d8a in boost::asio::ssl::detail::io_op&lt;boost::asio::basic_stream_socket&lt;boost::asio::ip::tcp, boost::asio::stream_socket_service&lt;boost::asio::ip::tcp&gt; &gt;, boost::asio::ssl::detail::write_op&lt;boost::asio::mutable_buffers_1&gt;, boost::asio::detail::write_op&lt;boost::asio::ssl::stream&lt;boost::asio::basic_stream_socket&lt;boost::asio::ip::tcp, boost::asio::stream_socket_service&lt;boost::asio::ip::tcp&gt; &gt; &gt;, boost::asio::mutable_buffers_1, boost::asio::detail::transfer_all_t, boost::_bi::bind_t&lt;void, boost::_mfi::mf2&lt;void, Peer, boost::system::error_code const&amp;, unsigned long&gt;, boost::_bi::list3&lt;boost::_bi::value&lt;boost::shared_ptr&lt;Peer&gt; &gt;, boost::arg&lt;1&gt; (*)(), boost::arg&lt;2&gt; (*)()&gt; &gt; &gt; &gt;::operator() (this=0x7fff8ad74d10, ec=..., bytes_transferred=0, start=1) at /usr/include/boost/asio/ssl/detail/io.hpp:136 #9 0x0000000000da7f42 in boost::asio::ssl::detail::async_io&lt;boost::asio::basic_stream_socket&lt;boost::asio::ip::tcp, boost::asio::stream_socket_service&lt;boost::asio::ip::tcp&gt; &gt;, boost::asio::ssl::detail::write_op&lt;boost::asio::mutable_buffers_1&gt;, boost::asio::detail::write_op&lt;boost::asio::ssl::stream&lt;boost::asio::basic_stream_socket&lt;boost::asio::ip::tcp, boost::asio::stream_socket_service&lt;boost::asio::ip::tcp&gt; &gt; &gt;, boost::asio::mutable_buffers_1, boost::asio::detail::transfer_all_t, boost::_bi::bind_t&lt;void, boost::_mfi::mf2&lt;void, Peer, boost::system::error_code const&amp;, unsigned long&gt;, boost::_bi::list3&lt;boost::_bi::value&lt;boost::shared_ptr&lt;Peer&gt; &gt;, boost::arg&lt;1&gt; (*)(), boost::arg&lt;2&gt; (*)()&gt; &gt; &gt; &gt; (next_layer=..., core=..., op=..., handler=...) at /usr/include/boost/asio/ssl/detail/io.hpp:322 #10 0x0000000000da634d in boost::asio::ssl::stream&lt;boost::asio::basic_stream_socket&lt;boost::asio::ip::tcp, boost::asio::stream_socket_service&lt;boost::asio::ip::tcp&gt; &gt; &gt;::async_write_some&lt;boost::asio::mutable_buffers_1, boost::asio::detail::write_op&lt;boost::asio::ssl::stream&lt;boost::asio::basic_stream_socket&lt;boost::asio::ip::tcp, boost::asio::stream_socket_service&lt;boost::asio::ip::tcp&gt; &gt; &gt;, boost::asio::mutable_buffers_1, boost::asio::detail::transfer_all_t, boost::_bi::bind_t&lt;void, boost::_mfi::mf2&lt;void, Peer, boost::system::error_code const&amp;, unsigned long&gt;, boost::_bi::list3&lt;boost::_bi::value&lt;boost::shared_ptr&lt;Peer&gt; &gt;, boost::arg&lt;1&gt; (*)(), boost::arg&lt;2&gt; (*)()&gt; &gt; &gt; &gt; (this=0x1e61880, buffers=..., handler=...) at /usr/include/boost/asio/ssl/stream.hpp:502 #11 0x0000000000da3032 in boost::asio::detail::write_op&lt;boost::asio::ssl::stream&lt;boost::asio::basic_stream_socket&lt;boost::asio::ip::tcp, boost::asio::stream_socket_service&lt;boost::asio::ip::tcp&gt; &gt; &gt;, boost::asio::mutable_buffers_1, boost::asio::detail::transfer_all_t, boost::_bi::bind_t&lt;void, boost::_mfi::mf2&lt;void, Peer, boost::system::error_code const&amp;, unsigned long&gt;, boost::_bi::list3&lt;boost::_bi::value&lt;boost::shared_ptr&lt;Peer&gt; &gt;, boost::arg&lt;1&gt; (*)(), boost::arg&lt;2&gt; (*)()&gt; &gt; &gt;::operator() (this=0x7fff8ad74f00, ec=..., bytes_transferred=0, start=1) at /usr/include/boost/asio/impl/write.hpp:250 #12 0x0000000000d9ffbb in boost::asio::async_write&lt;boost::asio::ssl::stream&lt;boost::asio::basic_stream_socket&lt;boost::asio::ip::tcp, boost::asio::stream_socket_service&lt;boost::asio::ip::tcp&gt; &gt; &gt;, boost::asio::mutable_buffers_1, boost::_bi::bind_t&lt;void, boost::_mfi::mf2&lt;void, Peer, boost::system::error_code const&amp;, unsigned long&gt;, boost::_bi::list3&lt;boost::_bi::value&lt;boost::shared_ptr&lt;Peer&gt; &gt;, boost::arg&lt;1&gt; (*)(), boost::arg&lt;2&gt; (*)()&gt; &gt; &gt; (s=..., buffers=..., handler=...) at /usr/include/boost/asio/impl/write.hpp:585 </code></pre> <p>Any ideas?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload