-
Type: Bug
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: 3.2.6
-
Component/s: Networking, Replication
-
Environment:FreeBSD 11 CURRENT
-
Fully Compatible
-
ALL
-
Platforms 16 (06/24/16)
The crash comes from unhandled exception thrown in ~AsyncStream() destructor, which calls destroyStream() function, which, in turn, calls incorrect version of close() on ASIO socket.
Relevant code piece from async_stream_common.h
.... std::error_code ec; stream->shutdown(asio::ip::tcp::socket::shutdown_both, ec); stream->close(); // <----- probably meant to call another overload close(ec) if (ec) { logCloseFailed(ec); } ....
Most likely another close() overload was meant to be used that accepts ec as an argument. The overload used here just throws an exceptions if socket is closed.