diff options
Diffstat (limited to 'qpid/cpp/src/qpid/broker/HeadersExchange.cpp')
-rw-r--r-- | qpid/cpp/src/qpid/broker/HeadersExchange.cpp | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/qpid/cpp/src/qpid/broker/HeadersExchange.cpp b/qpid/cpp/src/qpid/broker/HeadersExchange.cpp index 4bda70d313..82ac5911ee 100644 --- a/qpid/cpp/src/qpid/broker/HeadersExchange.cpp +++ b/qpid/cpp/src/qpid/broker/HeadersExchange.cpp @@ -112,14 +112,9 @@ bool HeadersExchange::bind(Queue::shared_ptr queue, const string& bindingKey, co { Mutex::ScopedLock l(lock); - //NOTE: do not include the fed op/tags/origin in the - //arguments as when x-match is 'all' these would prevent - //matching (they are internally added properties - //controlling binding propagation but not relevant to - //actual routing) - Binding::shared_ptr binding (new Binding (bindingKey, queue, this, extra_args)); + Binding::shared_ptr binding (new Binding (bindingKey, queue, this, *args)); BoundKey bk(binding); - if (bindings.add_unless(bk, MatchArgs(queue, &extra_args))) { + if (bindings.add_unless(bk, MatchArgs(queue, args))) { binding->startManagement(); propagate = bk.fedBinding.addOrigin(queue->getName(), fedOrigin); if (mgmtExchange != 0) { @@ -163,13 +158,12 @@ bool HeadersExchange::bind(Queue::shared_ptr queue, const string& bindingKey, co return true; } -bool HeadersExchange::unbind(Queue::shared_ptr queue, const string& bindingKey, const FieldTable *args){ +bool HeadersExchange::unbind(Queue::shared_ptr queue, const string& bindingKey, const FieldTable*){ bool propagate = false; - string fedOrigin(args ? args->getAsString(qpidFedOrigin) : ""); { Mutex::ScopedLock l(lock); - FedUnbindModifier modifier(queue->getName(), fedOrigin); + FedUnbindModifier modifier; MatchKey match_key(queue, bindingKey); bindings.modify_if(match_key, modifier); propagate = modifier.shouldPropagate; @@ -336,7 +330,11 @@ HeadersExchange::FedUnbindModifier::FedUnbindModifier() : shouldUnbind(false), s bool HeadersExchange::FedUnbindModifier::operator()(BoundKey & bk) { - shouldPropagate = bk.fedBinding.delOrigin(queueName, fedOrigin); + if ("" == fedOrigin) { + shouldPropagate = bk.fedBinding.delOrigin(); + } else { + shouldPropagate = bk.fedBinding.delOrigin(queueName, fedOrigin); + } if (bk.fedBinding.countFedBindings(queueName) == 0) { shouldUnbind = true; |