diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/qpid/broker/Link.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/cpp/src/qpid/broker/Link.cpp b/cpp/src/qpid/broker/Link.cpp index 7e1767fed7..a27cb7c5ac 100644 --- a/cpp/src/qpid/broker/Link.cpp +++ b/cpp/src/qpid/broker/Link.cpp @@ -261,7 +261,15 @@ void Link::ioThreadProcessing() active.erase(removed, active.end()); } - //process any pending creates and/or cancellations + //process any pending creates and/or cancellations (do + //cancellations first in case any of the creates represent + //recreation of cancelled subscriptions + if (!cancellations.empty()) { + for (Bridges::iterator i = cancellations.begin(); i != cancellations.end(); ++i) { + (*i)->cancel(*connection); + } + cancellations.clear(); + } if (!created.empty()) { for (Bridges::iterator i = created.begin(); i != created.end(); ++i) { active.push_back(*i); @@ -269,12 +277,6 @@ void Link::ioThreadProcessing() } created.clear(); } - if (!cancellations.empty()) { - for (Bridges::iterator i = cancellations.begin(); i != cancellations.end(); ++i) { - (*i)->cancel(*connection); - } - cancellations.clear(); - } } void Link::setConnection(Connection* c) |