diff options
author | Alan Conway <aconway@apache.org> | 2011-10-19 21:27:23 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2011-10-19 21:27:23 +0000 |
commit | 84c575a2038002201f1e927a6d05fa610a017269 (patch) | |
tree | a5ebeb07685fbbcf5722e6a2483a2f5806a22c0f | |
parent | 92010107561eed9051b0a4020068b9aced0f2e97 (diff) | |
download | qpid-python-84c575a2038002201f1e927a6d05fa610a017269.tar.gz |
QPID-2920: Replace RwLock with Mutex in cluster::LockedMap.
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/qpid-2920-active@1186499 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/src/qpid/cluster/exp/EventHandler.cpp | 9 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/cluster/exp/LockedMap.h | 25 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/cluster/exp/QueueContext.cpp | 5 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/cluster/exp/QueueContext.h | 2 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/cluster/exp/QueueHandler.h | 1 |
5 files changed, 15 insertions, 27 deletions
diff --git a/qpid/cpp/src/qpid/cluster/exp/EventHandler.cpp b/qpid/cpp/src/qpid/cluster/exp/EventHandler.cpp index ed02d35d73..dc10548f80 100644 --- a/qpid/cpp/src/qpid/cluster/exp/EventHandler.cpp +++ b/qpid/cpp/src/qpid/cluster/exp/EventHandler.cpp @@ -64,15 +64,18 @@ void EventHandler::deliver( framing::AMQFrame frame; // FIXME aconway 2011-09-29: don't decode own frame bodies. Ignore based on channel. while (buf.available()) { + // FIXME aconway 2011-10-19: multi-version, skip unrecognized frames. frame.decode(buf); QPID_LOG(trace, "cluster: deliver on " << cpg.getName() << " from "<< PrettyId(sender, self) << ": " << frame); try { handle(frame); } catch (const std::exception& e) { - // Non-fatal error. Our state isn't compromized by receiving bad frames. - QPID_LOG(error, "cluster: error in deliver on " << cpg.getName() - << " from " << PrettyId(sender, self) << ": " << frame); + // FIXME aconway 2011-10-19: error handling. + QPID_LOG(error, "cluster: error in deliver on " << cpg.getName() + << " from " << PrettyId(sender, self) + << ": " << frame + << ": " << e.what()); } } } diff --git a/qpid/cpp/src/qpid/cluster/exp/LockedMap.h b/qpid/cpp/src/qpid/cluster/exp/LockedMap.h index cacb9c792c..ced9c24967 100644 --- a/qpid/cpp/src/qpid/cluster/exp/LockedMap.h +++ b/qpid/cpp/src/qpid/cluster/exp/LockedMap.h @@ -37,27 +37,14 @@ class LockedMap public: /** Get value associated with key, returns Value() if none. */ Value get(const Key& key) const { - sys::RWlock::ScopedRlock r(lock); + sys::Mutex::ScopedLock r(lock); typename Map::const_iterator i = map.find(key); return (i == map.end()) ? Value() : i->second; } - /** Update value with the value for key. - *@return true if key was found. - */ - bool get(const Key& key, Value& value) const { - sys::RWlock::ScopedRlock r(lock); - typename Map::const_iterator i = map.find(key); - if (i != map.end()) { - value = i->second; - return true; - } - return false; - } - /** Associate value with key, overwriting any previous value for key. */ void put(const Key& key, const Value& value) { - sys::RWlock::ScopedWlock w(lock); + sys::Mutex::ScopedLock w(lock); map[key] = value; } @@ -65,19 +52,19 @@ class LockedMap * Returns true if the value was added. */ bool add(const Key& key, const Value& value) { - sys::RWlock::ScopedWlock w(lock); + sys::Mutex::ScopedLock w(lock); return map.insert(std::make_pair(key, value)).second; } /** Erase the value associated with key if any. Return true if a value was erased. */ bool erase(const Key& key) { - sys::RWlock::ScopedWlock w(lock); + sys::Mutex::ScopedLock w(lock); return map.erase(key); } /** Remove and return value associated with key, returns Value() if none. */ Value pop(const Key& key) { - sys::RWlock::ScopedWlock w(lock); + sys::Mutex::ScopedLock w(lock); Value value; typename Map::iterator i = map.find(key); if (i != map.end()) { @@ -90,7 +77,7 @@ class LockedMap private: typedef std::map<Key, Value> Map; Map map; - mutable sys::RWlock lock; + mutable sys::Mutex lock; }; }} // namespace qpid::cluster diff --git a/qpid/cpp/src/qpid/cluster/exp/QueueContext.cpp b/qpid/cpp/src/qpid/cluster/exp/QueueContext.cpp index ece3e0f2c1..b8bdb2aa07 100644 --- a/qpid/cpp/src/qpid/cluster/exp/QueueContext.cpp +++ b/qpid/cpp/src/qpid/cluster/exp/QueueContext.cpp @@ -124,9 +124,8 @@ void QueueContext::stopped() { void QueueContext::requeue(uint32_t position, bool redelivered) { // No lock, unacked has its own lock. - broker::QueuedMessage qm; - if (unacked.get(position, qm)) { - unacked.erase(position); + broker::QueuedMessage qm = unacked.pop(position); + if (qm.queue) { if (redelivered) qm.payload->redeliver(); BrokerContext::ScopedSuppressReplication ssr; queue.requeue(qm); diff --git a/qpid/cpp/src/qpid/cluster/exp/QueueContext.h b/qpid/cpp/src/qpid/cluster/exp/QueueContext.h index 691e11ebe7..a37225e64e 100644 --- a/qpid/cpp/src/qpid/cluster/exp/QueueContext.h +++ b/qpid/cpp/src/qpid/cluster/exp/QueueContext.h @@ -99,7 +99,7 @@ private: size_t consumers; size_t hash; - typedef LockedMap<uint32_t, broker::QueuedMessage> UnackedMap; // FIXME aconway 2011-09-15: don't need read/write map? Rename + typedef LockedMap<uint32_t, broker::QueuedMessage> UnackedMap; UnackedMap unacked; }; diff --git a/qpid/cpp/src/qpid/cluster/exp/QueueHandler.h b/qpid/cpp/src/qpid/cluster/exp/QueueHandler.h index a4898e9a4c..ecb9ba7821 100644 --- a/qpid/cpp/src/qpid/cluster/exp/QueueHandler.h +++ b/qpid/cpp/src/qpid/cluster/exp/QueueHandler.h @@ -23,7 +23,6 @@ */ #include "HandlerBase.h" -#include "LockedMap.h" #include "Settings.h" #include "qpid/framing/AMQP_AllOperations.h" #include "boost/shared_ptr.hpp" |