Merge pull request #5581 from Icinga/fix/api-crash-race-condition

Fix possible race condition in ApiListener locking
This commit is contained in:
Michael Friedrich 2017-10-12 13:40:59 +02:00 committed by GitHub
commit 77ecdbd85c
2 changed files with 10 additions and 6 deletions

View File

@ -1309,37 +1309,37 @@ double ApiListener::CalculateZoneLag(const Endpoint::Ptr& endpoint)
void ApiListener::AddAnonymousClient(const JsonRpcConnection::Ptr& aclient)
{
ObjectLock olock(this);
boost::mutex::scoped_lock(m_AnonymousClientsLock);
m_AnonymousClients.insert(aclient);
}
void ApiListener::RemoveAnonymousClient(const JsonRpcConnection::Ptr& aclient)
{
ObjectLock olock(this);
boost::mutex::scoped_lock(m_AnonymousClientsLock);
m_AnonymousClients.erase(aclient);
}
std::set<JsonRpcConnection::Ptr> ApiListener::GetAnonymousClients(void) const
{
ObjectLock olock(this);
boost::mutex::scoped_lock(m_AnonymousClientsLock);
return m_AnonymousClients;
}
void ApiListener::AddHttpClient(const HttpServerConnection::Ptr& aclient)
{
ObjectLock olock(this);
boost::mutex::scoped_lock(m_HttpClientsLock);
m_HttpClients.insert(aclient);
}
void ApiListener::RemoveHttpClient(const HttpServerConnection::Ptr& aclient)
{
ObjectLock olock(this);
boost::mutex::scoped_lock(m_HttpClientsLock);
m_HttpClients.erase(aclient);
}
std::set<HttpServerConnection::Ptr> ApiListener::GetHttpClients(void) const
{
ObjectLock olock(this);
boost::mutex::scoped_lock(m_HttpClientsLock);
return m_HttpClients;
}

View File

@ -115,8 +115,12 @@ protected:
private:
boost::shared_ptr<SSL_CTX> m_SSLContext;
std::set<TcpSocket::Ptr> m_Servers;
mutable boost::mutex m_AnonymousClientsLock;
mutable boost::mutex m_HttpClientsLock;
std::set<JsonRpcConnection::Ptr> m_AnonymousClients;
std::set<HttpServerConnection::Ptr> m_HttpClients;
Timer::Ptr m_Timer;
Timer::Ptr m_ReconnectTimer;
Timer::Ptr m_AuthorityTimer;