From e0e254548b6200d16bc3f4be3bd255b041a76532 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 21 May 2009 22:38:30 +0200 Subject: InformationManager Thread-safe gemacht --- src/Client/InformationManager.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'src/Client/InformationManager.cpp') diff --git a/src/Client/InformationManager.cpp b/src/Client/InformationManager.cpp index f1627f4..8fde6f7 100644 --- a/src/Client/InformationManager.cpp +++ b/src/Client/InformationManager.cpp @@ -45,11 +45,15 @@ void InformationManager::DaemonStateUpdateRequestHandler::handlePacket(const Com // TODO Require authentication - std::map::iterator host = informationManager.get()->daemons.find(packet["name"]); - if(host != informationManager.get()->daemons.end()) - host->second.setState(packet["state"]); - else - Common::Logger::log(Common::Logger::WARNING, "Received a state update for an unknown host."); + { + boost::lock_guard lock(informationManager.mutex); + + std::map::iterator host = informationManager.daemons.find(packet["name"]); + if(host != informationManager.daemons.end()) + host->second.setState(packet["state"]); + else + Common::Logger::log(Common::Logger::WARNING, "Received a state update for an unknown host."); + } Common::XmlPacket ret; ret.setType("OK"); @@ -68,6 +72,8 @@ void InformationManager::doDeinit() { } void InformationManager::updateDaemonList(Common::Connection *con) { + boost::lock_guard lock(mutex); + if(updating) return; @@ -78,6 +84,8 @@ void InformationManager::updateDaemonList(Common::Connection *con) { } void InformationManager::daemonListRequestFinished(const Common::Request &request) { + boost::lock_guard lock(mutex); + try { const Common::XmlPacket &packet = request.getResult(); @@ -99,6 +107,8 @@ void InformationManager::daemonListRequestFinished(const Common::Request &reques } updating = false; + + updateCond.notify_all(); } } -- cgit v1.2.3