mirror of https://github.com/Icinga/icinga2.git
Fix deadlock in {HttpServerConnection,JsonRpcConnection}::DataAvailableHandler
refs #11014
This commit is contained in:
parent
a49f8f142e
commit
55720f3005
|
@ -78,6 +78,7 @@ void HttpServerConnection::Disconnect(void)
|
|||
ApiListener::Ptr listener = ApiListener::GetInstance();
|
||||
listener->RemoveHttpClient(this);
|
||||
|
||||
if (!m_Stream->IsEof())
|
||||
m_Stream->Shutdown();
|
||||
}
|
||||
|
||||
|
@ -196,6 +197,9 @@ void HttpServerConnection::ProcessMessageAsync(HttpRequest& request)
|
|||
|
||||
void HttpServerConnection::DataAvailableHandler(void)
|
||||
{
|
||||
bool close = false;
|
||||
|
||||
if (!m_Stream->IsEof()) {
|
||||
boost::mutex::scoped_lock lock(m_DataHandlerMutex);
|
||||
|
||||
try {
|
||||
|
@ -205,8 +209,13 @@ void HttpServerConnection::DataAvailableHandler(void)
|
|||
Log(LogWarning, "HttpServerConnection")
|
||||
<< "Error while reading Http request: " << DiagnosticInformation(ex);
|
||||
|
||||
Disconnect();
|
||||
close = true;
|
||||
}
|
||||
} else
|
||||
close = true;
|
||||
|
||||
if (close)
|
||||
Disconnect();
|
||||
}
|
||||
|
||||
void HttpServerConnection::CheckLiveness(void)
|
||||
|
|
|
@ -227,6 +227,9 @@ bool JsonRpcConnection::ProcessMessage(void)
|
|||
|
||||
void JsonRpcConnection::DataAvailableHandler(void)
|
||||
{
|
||||
bool close = false;
|
||||
|
||||
if (!m_Stream->IsEof()) {
|
||||
boost::mutex::scoped_lock lock(m_DataHandlerMutex);
|
||||
|
||||
try {
|
||||
|
@ -238,7 +241,14 @@ void JsonRpcConnection::DataAvailableHandler(void)
|
|||
<< "': " << DiagnosticInformation(ex);
|
||||
|
||||
Disconnect();
|
||||
|
||||
return;
|
||||
}
|
||||
} else
|
||||
close = true;
|
||||
|
||||
if (close)
|
||||
Disconnect();
|
||||
}
|
||||
|
||||
Value SetLogPositionHandler(const MessageOrigin::Ptr& origin, const Dictionary::Ptr& params)
|
||||
|
|
Loading…
Reference in New Issue