From 8ec6597d5372ccebb689483b8074085f278022e1 Mon Sep 17 00:00:00 2001 From: "Carl C. Trieloff" Date: Tue, 14 Oct 2008 15:23:51 +0000 Subject: Correction of lock scope to make sure ordering from exchange to queue is preseved when sequencing is used. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@704565 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/Exchange.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'cpp/src/qpid/broker/Exchange.cpp') diff --git a/cpp/src/qpid/broker/Exchange.cpp b/cpp/src/qpid/broker/Exchange.cpp index deb8df3fc4..a3130d9edb 100644 --- a/cpp/src/qpid/broker/Exchange.cpp +++ b/cpp/src/qpid/broker/Exchange.cpp @@ -41,6 +41,20 @@ const std::string qpidMsgSequence("qpid.msg_sequence"); } +Exchange::PreRoute::PreRoute(Deliverable& msg, Exchange* _p):parent(_p) { + if (parent && parent->sequence){ + parent->sequenceLock.lock(); + parent->sequenceNo++; + msg.getMessage().getProperties()->getApplicationHeaders().setInt64(qpidMsgSequence,parent->sequenceNo); + } +} + +Exchange::PreRoute::~PreRoute(){ + if (parent && parent->sequence){ + parent->sequenceLock.unlock(); + } +} + Exchange::Exchange (const string& _name, Manageable* parent) : name(_name), durable(false), persistenceId(0), sequence(false), sequenceNo(0), mgmtExchange(0) @@ -89,13 +103,6 @@ Exchange::~Exchange () mgmtExchange->resourceDestroy (); } -void Exchange::preRoute(Deliverable& msg){ - if (sequence){ - sys::Mutex::ScopedLock lock(sequenceLock); - msg.getMessage().getProperties()->getApplicationHeaders().setInt64(qpidMsgSequence,++sequenceNo); - } -} - void Exchange::setPersistenceId(uint64_t id) const { if (mgmtExchange != 0 && persistenceId == 0) -- cgit v1.2.1