Opened 13 years ago

Closed 11 years ago

#3958 closed Bugs (fixed)

ssl::stream async_read_some and async_write_some handlers never run concurrently

Reported by: L McGuinness <lorcan.mcguinness@…> Owned by: chris_kohlhoff
Milestone: To Be Determined Component: asio
Version: Boost 1.42.0 Severity: Problem
Keywords: openssl ssl strand concurrency asio Cc: samjmill@…

Description

Handlers passed to ssl::stream::async_read_some and ssl::stream::async_write_some are always invoked in the context of a strand. This strand is a member of openssl_stream_service, which is typically a process-wide instance.

The effect of this is that a time-consuming async_read_some handler on one ssl::stream instance can block all other async_read_some and async_write_some handlers on other instances of ssl::stream.

The code that does this is in boost/asio/ssl/detail/openssl_operation.hpp. Line 319 performs strand::wrap on the callback to openssl_operation::async_write_handler. At lines 367 and 373, async_write_handler invokes the user's handler function (passed to ssl::stream::async_write_some). This runs in the context of strand_.

The strand instance in this case is always openssl_stream_service::strand_, as can be seen in asio/ssl/detail/openssl_stream_service.hpp, line 395.

The situation for async_read_handler is similar.

Attachments (1)

asio_ssl_strand.patch (2.8 KB ) - added by tianhao.qiu@… 12 years ago.
http://permalink.gmane.org/gmane.comp.lib.boost.asio.user/4099

Download all attachments as: .zip

Change History (8)

comment:1 by samjmill@…, 12 years ago

Cc: samjmill@… added

comment:2 by anonymous, 12 years ago

This bug leads to such a great performance degradation. SSL version of my sample appliction is about 50 times slower than the same application with raw TCP/IP sockets.

comment:3 by tianhao.qiu@…, 12 years ago

comment:4 by dremon, 12 years ago

This patch also solves a deadlock problem when making recursive connection to the server. There was a deadlocked async_handshake called from the read_handler, now it works ok with this patch.

in reply to:  4 comment:5 by anonymous, 12 years ago

Correction: it still deadlocks occasionally, but at least the server still accepts other connections. Without the patch the server was completely locked.

comment:6 by fred, 12 years ago

I thought that with open-sources, fixes come quickly... tianhao provided a fix (thanks for him)... Why is it so long to integrate it in the next release?

comment:7 by chris_kohlhoff, 11 years ago

Resolution: fixed
Status: newclosed

As of [72428], release branch contains the new SSL implementation.

Note: See TracTickets for help on using tickets.