From 11d32d56f78ba7f5018edec40b6bb986f33cfc5d Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Thu, 31 Jan 2013 19:43:33 +0000 Subject: 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 --- qpid/cpp/src/qpid/ha/Membership.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'qpid/cpp/src') 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; -- cgit v1.2.1