diff options
author | Alan Conway <aconway@apache.org> | 2009-02-17 20:18:38 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2009-02-17 20:18:38 +0000 |
commit | 449d9d326b7cea02934c3e7e8ea7e84a817e47ac (patch) | |
tree | 4ecd016673b36dede5b99a7267be9c0a1eff3118 /cpp/src/qpid/client/SubscriptionManager.cpp | |
parent | 4ddd827fc647d9b7a80de30b361e208b44ee2e13 (diff) | |
download | qpid-python-449d9d326b7cea02934c3e7e8ea7e84a817e47ac.tar.gz |
Minor fixes.
client/SubscriptionManager: made it thread safe, was causing latencytest to crash with --rate and --time-limit.
cluster/Cluster.cpp: don't call cpg_leave during shutdown. Not required and a problem if shutdown was caused by a cpg error.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@745226 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/client/SubscriptionManager.cpp')
-rw-r--r-- | cpp/src/qpid/client/SubscriptionManager.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/cpp/src/qpid/client/SubscriptionManager.cpp b/cpp/src/qpid/client/SubscriptionManager.cpp index 1d1d23056e..b016109ead 100644 --- a/cpp/src/qpid/client/SubscriptionManager.cpp +++ b/cpp/src/qpid/client/SubscriptionManager.cpp @@ -41,6 +41,7 @@ SubscriptionManager::SubscriptionManager(const Session& s) Subscription SubscriptionManager::subscribe( MessageListener& listener, const std::string& q, const SubscriptionSettings& ss, const std::string& n) { + sys::Mutex::ScopedLock l(lock); std::string name=n.empty() ? q:n; boost::intrusive_ptr<SubscriptionImpl> si = new SubscriptionImpl(*this, q, ss, name, &listener); dispatcher.listen(si); @@ -52,6 +53,7 @@ Subscription SubscriptionManager::subscribe( Subscription SubscriptionManager::subscribe( LocalQueue& lq, const std::string& q, const SubscriptionSettings& ss, const std::string& n) { + sys::Mutex::ScopedLock l(lock); std::string name=n.empty() ? q:n; boost::intrusive_ptr<SubscriptionImpl> si = new SubscriptionImpl(*this, q, ss, name, 0); lq.queue=si->divert(); @@ -74,13 +76,14 @@ Subscription SubscriptionManager::subscribe( void SubscriptionManager::cancel(const std::string& dest) { + sys::Mutex::ScopedLock l(lock); std::map<std::string, Subscription>::iterator i = subscriptions.find(dest); if (i != subscriptions.end()) { sync(session).messageCancel(dest); dispatcher.cancel(dest); Subscription s = i->second; - if (s.isValid()) subscriptions[dest].impl->cancelDiversion(); - subscriptions.erase(dest); + if (s.isValid()) s.impl->cancelDiversion(); + subscriptions.erase(i); } } @@ -131,6 +134,7 @@ Message SubscriptionManager::get(const std::string& queue, sys::Duration timeout Session SubscriptionManager::getSession() const { return session; } Subscription SubscriptionManager::getSubscription(const std::string& name) const { + sys::Mutex::ScopedLock l(lock); std::map<std::string, Subscription>::const_iterator i = subscriptions.find(name); if (i == subscriptions.end()) throw Exception(QPID_MSG("Subscription not found: " << name)); |