summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Bridge.cpp
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2009-07-02 18:09:12 +0000
committerTed Ross <tross@apache.org>2009-07-02 18:09:12 +0000
commitf907a67e437482ab37db092f19962a53a0502819 (patch)
tree4b8042c0ee00db6297c8b1d09b2b4556bbf31d0b /cpp/src/qpid/broker/Bridge.cpp
parent577c1e9b2e12483223efe95cd83eb0f57e9f3448 (diff)
downloadqpid-python-f907a67e437482ab37db092f19962a53a0502819.tar.gz
Federation: Propagation of dynamic bindings is now done on the thread servicing the
federation link (connection). Also, some minor cleanup of unneeded recursive includes. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@790698 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Bridge.cpp')
-rw-r--r--cpp/src/qpid/broker/Bridge.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/cpp/src/qpid/broker/Bridge.cpp b/cpp/src/qpid/broker/Bridge.cpp
index e629a20e87..d5a36d2bc8 100644
--- a/cpp/src/qpid/broker/Bridge.cpp
+++ b/cpp/src/qpid/broker/Bridge.cpp
@@ -21,11 +21,11 @@
#include "Bridge.h"
#include "ConnectionState.h"
#include "Connection.h"
+#include "Link.h"
#include "LinkRegistry.h"
#include "SessionState.h"
#include "qpid/management/ManagementAgent.h"
-#include "qpid/framing/FieldTable.h"
#include "qpid/framing/Uuid.h"
#include "qpid/log/Statement.h"
#include <iostream>
@@ -84,6 +84,7 @@ Bridge::~Bridge()
void Bridge::create(Connection& c)
{
connState = &c;
+ conn = &c;
FieldTable options;
if (args.i_sync) options.setInt("qpid.sync_frequency", args.i_sync);
SessionHandler& sessionHandler = c.getChannel(id);
@@ -288,7 +289,8 @@ void Bridge::propagateBinding(const string& key, const string& tagList,
else
bindArgs.setString(qpidFedOrigin, origin);
- peer->getExchange().bind(queueName, args.i_src, key, bindArgs);
+ conn->requestIOProcessing(boost::bind(&Bridge::ioThreadPropagateBinding, this,
+ queueName, args.i_src, key, bindArgs));
}
}
@@ -299,7 +301,13 @@ void Bridge::sendReorigin()
bindArgs.setString(qpidFedOp, fedOpReorigin);
bindArgs.setString(qpidFedTags, link->getBroker()->getFederationTag());
- peer->getExchange().bind(queueName, args.i_src, args.i_key, bindArgs);
+ conn->requestIOProcessing(boost::bind(&Bridge::ioThreadPropagateBinding, this,
+ queueName, args.i_src, args.i_key, bindArgs));
+}
+
+void Bridge::ioThreadPropagateBinding(const string& queue, const string& exchange, const string& key, FieldTable args)
+{
+ peer->getExchange().bind(queue, exchange, key, args);
}
bool Bridge::containsLocalTag(const string& tagList) const