Details
-
Bug
-
Status: Closed
-
Major - P3
-
Resolution: Fixed
-
3.2.6
-
FreeBSD 11 CURRENT
-
Fully Compatible
-
ALL
-
Platforms 16 (06/24/16)
Description
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.