summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/BrokerQueue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/broker/BrokerQueue.cpp')
-rw-r--r--cpp/src/qpid/broker/BrokerQueue.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/cpp/src/qpid/broker/BrokerQueue.cpp b/cpp/src/qpid/broker/BrokerQueue.cpp
index 58a8c85fcb..f11766e7ec 100644
--- a/cpp/src/qpid/broker/BrokerQueue.cpp
+++ b/cpp/src/qpid/broker/BrokerQueue.cpp
@@ -23,6 +23,8 @@
#include "qpid/log/Statement.h"
#include "BrokerQueue.h"
+#include "BrokerExchange.h"
+#include "DeliverableMessage.h"
#include "MessageStore.h"
#include "qpid/sys/Monitor.h"
#include "qpid/sys/Time.h"
@@ -233,6 +235,16 @@ void Queue::configure(const FieldTable& _settings)
void Queue::destroy()
{
+ if (alternateExchange.get()) {
+ Mutex::ScopedLock locker(lock);
+ while(!messages.empty()){
+ DeliverableMessage msg(messages.front());
+ alternateExchange->route(msg, msg.getMessage().getRoutingKey(),
+ &(msg.getMessage().getApplicationHeaders()));
+ pop();
+ }
+ }
+
if (store) {
store->destroy(*this);
}
@@ -289,3 +301,8 @@ Queue::shared_ptr Queue::decode(QueueRegistry& queues, framing::Buffer& buffer)
return result.first;
}
+
+void Queue::setAlternateExchange(boost::shared_ptr<Exchange> exchange)
+{
+ alternateExchange = exchange;
+}