diff --git a/lib/remote/jsonrpcconnection.cpp b/lib/remote/jsonrpcconnection.cpp index db35ef8332b..d5a8e46cb8a 100644 --- a/lib/remote/jsonrpcconnection.cpp +++ b/lib/remote/jsonrpcconnection.cpp @@ -197,14 +197,14 @@ void JsonRpcConnection::Disconnect() Log(LogWarning, "JsonRpcConnection") << "API client disconnected for identity '" << m_Identity << "'"; - { - CpuBoundWork removeClient (yc); - - if (m_Endpoint) { - m_Endpoint->RemoveClient(this); - } else { - ApiListener::GetInstance()->RemoveAnonymousClient(this); - } + // We need to unregister the endpoint client as soon as possible not to confuse Icinga 2, + // given that Endpoint::GetConnected() is just performing a check that the endpoint's client + // cache is not empty, which could result in an already disconnected endpoint never trying to + // reconnect again. See #7444. + if (m_Endpoint) { + m_Endpoint->RemoveClient(this); + } else { + ApiListener::GetInstance()->RemoveAnonymousClient(this); } m_OutgoingMessagesQueued.Set();