-
Type:
Bug
-
Status: Closed
-
Priority:
Major - P3
-
Resolution: Fixed
-
Affects Version/s: 3.2.6
-
Component/s: Networking, Replication
-
Labels:
-
Environment:FreeBSD 11 CURRENT
-
Backwards Compatibility:Fully Compatible
-
Operating System:ALL
-
Backport Completed:
-
Sprint: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.