summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2013-01-31 19:43:33 +0000
committerAlan Conway <aconway@apache.org>2013-01-31 19:43:33 +0000
commit11d32d56f78ba7f5018edec40b6bb986f33cfc5d (patch)
tree8f3452efc3c6cda9c9e40820df9998b482229a70 /qpid/cpp/src
parenta191f0cd794d2ef8e3c51212c6423eb18b0d50eb (diff)
downloadqpid-python-11d32d56f78ba7f5018edec40b6bb986f33cfc5d.tar.gz
QPID-4555: HA fix deletion of self from membership.
It was possible for a membership update to erase a broker it's own membership. This caused infrequent core dumps while running ha_tests.test_failover_send_receive. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1441162 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/ha/Membership.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/qpid/cpp/src/qpid/ha/Membership.cpp b/qpid/cpp/src/qpid/ha/Membership.cpp
index d33d57c37f..6c64d86fd7 100644
--- a/qpid/cpp/src/qpid/ha/Membership.cpp
+++ b/qpid/cpp/src/qpid/ha/Membership.cpp
@@ -59,6 +59,7 @@ void Membership::add(const BrokerInfo& b) {
void Membership::remove(const types::Uuid& id) {
Mutex::ScopedLock l(lock);
+ if (id == self) return; // Never remove myself
BrokerInfo::Map::iterator i = brokers.find(id);
if (i != brokers.end()) {
brokers.erase(i);
@@ -73,7 +74,7 @@ bool Membership::contains(const types::Uuid& id) {
void Membership::assign(const types::Variant::List& list) {
Mutex::ScopedLock l(lock);
- brokers.clear();
+ clear();
for (types::Variant::List::const_iterator i = list.begin(); i != list.end(); ++i) {
BrokerInfo b(i->asMap());
brokers[b.getSystemId()] = b;