summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/BrokerQueue.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-07-03 14:54:19 +0000
committerGordon Sim <gsim@apache.org>2007-07-03 14:54:19 +0000
commit338f2196c07ea6ce2cd40941bca9ef11e95be2bf (patch)
tree63ac3fe82c7d668850608ea19334997960089062 /cpp/src/qpid/broker/BrokerQueue.cpp
parente7f82f3d5b39c77ee913ee4cd6b4bf1bdc8b13bc (diff)
downloadqpid-python-338f2196c07ea6ce2cd40941bca9ef11e95be2bf.tar.gz
Fix (and test) for QPID-407. Messages are requeued at the head rather than the tail.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@552862 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/BrokerQueue.cpp')
-rw-r--r--cpp/src/qpid/broker/BrokerQueue.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/cpp/src/qpid/broker/BrokerQueue.cpp b/cpp/src/qpid/broker/BrokerQueue.cpp
index 1473ab6288..8ec2064680 100644
--- a/cpp/src/qpid/broker/BrokerQueue.cpp
+++ b/cpp/src/qpid/broker/BrokerQueue.cpp
@@ -75,6 +75,14 @@ void Queue::process(Message::shared_ptr& msg){
}
}
+void Queue::requeue(Message::shared_ptr& msg){
+ Mutex::ScopedLock locker(lock);
+ if(queueing || !dispatch(msg)){
+ queueing = true;
+ messages.push_front(msg);
+ }
+}
+
bool Queue::dispatch(Message::shared_ptr& msg){
if(consumers.empty()){
return false;
@@ -163,12 +171,12 @@ uint32_t Queue::purge(){
void Queue::pop(){
if (policy.get()) policy->dequeued(messages.front()->contentSize());
- messages.pop();
+ messages.pop_front();
}
void Queue::push(Message::shared_ptr& msg){
queueing = true;
- messages.push(msg);
+ messages.push_back(msg);
if (policy.get()) {
policy->enqueued(msg->contentSize());
if (policy->limitExceeded()) {