Merge pull request #7485 from Icinga/bugfix/api-disconnect-defer

Avoid the Defer-Disconnect destructor pattern with Boost.Coroutines
This commit is contained in:
Michael Friedrich 2019-09-09 11:41:34 +02:00 committed by GitHub
commit b3c48e7520
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 7 deletions

View File

@ -553,7 +553,10 @@ void ApiListener::NewClientHandlerInternal(boost::asio::yield_context yc, const
Defer shutDownIfNeeded ([&sslConn, &willBeShutDown, &yc]() {
if (!willBeShutDown) {
sslConn.async_shutdown(yc);
// Ignore the error, but do not throw an exception being swallowed at all cost.
// https://github.com/Icinga/icinga2/issues/7351
boost::system::error_code ec;
sslConn.async_shutdown(yc[ec]);
}
});

View File

@ -472,8 +472,6 @@ void HttpServerConnection::ProcessMessages(boost::asio::yield_context yc)
namespace beast = boost::beast;
namespace http = beast::http;
Defer disconnect ([this]() { Disconnect(); });
try {
beast::flat_buffer buf;
@ -557,6 +555,8 @@ void HttpServerConnection::ProcessMessages(boost::asio::yield_context yc)
<< "Unhandled exception while processing HTTP request: " << ex.what();
}
}
Disconnect();
}
void HttpServerConnection::CheckLiveness(boost::asio::yield_context yc)

View File

@ -60,8 +60,6 @@ void JsonRpcConnection::Start()
void JsonRpcConnection::HandleIncomingMessages(boost::asio::yield_context yc)
{
Defer disconnect ([this]() { Disconnect(); });
for (;;) {
String message;
@ -97,12 +95,12 @@ void JsonRpcConnection::HandleIncomingMessages(boost::asio::yield_context yc)
l_TaskStats.InsertValue(Utility::GetTime(), 1);
}
Disconnect();
}
void JsonRpcConnection::WriteOutgoingMessages(boost::asio::yield_context yc)
{
Defer disconnect ([this]() { Disconnect(); });
Defer signalWriterDone ([this]() { m_WriterDone.Set(); });
do {
@ -136,6 +134,8 @@ void JsonRpcConnection::WriteOutgoingMessages(boost::asio::yield_context yc)
}
}
} while (!m_ShuttingDown);
Disconnect();
}
double JsonRpcConnection::GetTimestamp() const