diff options
Diffstat (limited to 'src/Client/InformationManager.h')
-rw-r--r-- | src/Client/InformationManager.h | 21 |
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; } }; |