summaryrefslogtreecommitdiffstats
path: root/src/Client/InformationManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Client/InformationManager.h')
-rw-r--r--src/Client/InformationManager.h21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/Client/InformationManager.h b/src/Client/InformationManager.h
index fff26b3..2c39601 100644
--- a/src/Client/InformationManager.h
+++ b/src/Client/InformationManager.h
@@ -27,6 +27,10 @@
#include <Common/Initializable.h>
#include <Common/Request.h>
+#include <boost/thread/condition_variable.hpp>
+#include <boost/thread/locks.hpp>
+#include <boost/thread/mutex.hpp>
+
namespace Mad {
namespace Client {
@@ -43,6 +47,9 @@ class InformationManager : public Common::Initializable {
static InformationManager informationManager;
+ boost::mutex mutex;
+ boost::condition_variable updateCond;
+
std::map<std::string, Common::HostInfo> daemons;
bool updating;
@@ -66,11 +73,21 @@ class InformationManager : public Common::Initializable {
void updateDaemonList(Common::Connection *con);
- bool isUpdating() const {
+ bool isUpdating() {
+ boost::lock_guard<boost::mutex> lock(mutex);
return updating;
}
- const std::map<std::string, Common::HostInfo>& getDaemons() const {
+ void waitWhileUpdating() {
+ boost::unique_lock<boost::mutex> lock(mutex);
+
+ while(updating)
+ updateCond.wait(lock);
+ }
+
+
+ std::map<std::string, Common::HostInfo> getDaemons() {
+ boost::lock_guard<boost::mutex> lock(mutex);
return daemons;
}
};