summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qpid/cpp/examples/qmf-console/cluster-qmon.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/qpid/cpp/examples/qmf-console/cluster-qmon.cpp b/qpid/cpp/examples/qmf-console/cluster-qmon.cpp
index 4ee2ce1edd..fe92f8a8ae 100644
--- a/qpid/cpp/examples/qmf-console/cluster-qmon.cpp
+++ b/qpid/cpp/examples/qmf-console/cluster-qmon.cpp
@@ -43,6 +43,11 @@ using qpid::sys::Mutex;
//==============================================================
// Main program
//==============================================================
+
+//
+// The Main class extends ConsoleListener so it can receive broker connected/disconnected
+// notifications.
+//
class Main : public ConsoleListener {
bool stopping; // Used to tell the program to exit
Mutex lock; // Mutex to protect the broker-map
@@ -84,11 +89,12 @@ public:
// Connect to the brokers.
//
for (int idx = 1; idx < argc; idx++) {
- Mutex::ScopedLock l(lock);
qpid::client::ConnectionSettings connSettings;
connSettings.host = "localhost";
connSettings.port = atoi(argv[idx]);
Broker* broker = sm.addBroker(connSettings);
+
+ Mutex::ScopedLock l(lock);
brokerMap[broker] = false; // initially assume broker is disconnected
}
@@ -100,11 +106,14 @@ public:
// Find an operational broker
//
Broker* operationalBroker = 0;
- for (map<Broker*, bool>::iterator iter = brokerMap.begin();
- iter != brokerMap.end(); iter++) {
- if (iter->second) {
- operationalBroker = iter->first;
- break;
+ {
+ Mutex::ScopedLock l(lock);
+ for (map<Broker*, bool>::iterator iter = brokerMap.begin();
+ iter != brokerMap.end(); iter++) {
+ if (iter->second) {
+ operationalBroker = iter->first;
+ break;
+ }
}
}