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: | 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)
Change History (8)
comment:1 by , 12 years ago
Cc: | added |
---|
comment:2 by , 12 years ago
comment:3 by , 12 years ago
Patch submitted based on the post: http://permalink.gmane.org/gmane.comp.lib.boost.asio.user/4099
by , 12 years ago
Attachment: | asio_ssl_strand.patch added |
---|
follow-up: 5 comment:4 by , 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.
comment:5 by , 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 , 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 , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
As of [72428], release branch contains the new SSL implementation.
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.