diff options
| author | Alan Conway <aconway@apache.org> | 2010-06-09 20:29:32 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2010-06-09 20:29:32 +0000 |
| commit | 1951f9cf0c246b53d1cddf65dfdb059ad8662377 (patch) | |
| tree | 2a8862e880777b61ecaae29bc335f18ade5c18c5 /cpp/src/qpid/broker/Connection.cpp | |
| parent | 81763331d2256790538f7003e8b98a9fee802881 (diff) | |
| download | qpid-python-1951f9cf0c246b53d1cddf65dfdb059ad8662377.tar.gz | |
Fix cluster-safe assertion in connection negotiation.
See https://bugzilla.redhat.com/show_bug.cgi?id=602347.
In a cluster, raise the management connect event when processing cluster.announce.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@953147 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Connection.cpp')
| -rw-r--r-- | cpp/src/qpid/broker/Connection.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/cpp/src/qpid/broker/Connection.cpp b/cpp/src/qpid/broker/Connection.cpp index ac574fc1a3..619f1a1bcb 100644 --- a/cpp/src/qpid/broker/Connection.cpp +++ b/cpp/src/qpid/broker/Connection.cpp @@ -24,6 +24,7 @@ #include "qpid/broker/Bridge.h" #include "qpid/broker/Broker.h" #include "qpid/sys/SecuritySettings.h" +#include "qpid/sys/ClusterSafe.h" #include "qpid/log/Statement.h" #include "qpid/ptr_map.h" @@ -121,7 +122,9 @@ Connection::~Connection() { if (mgmtObject != 0) { mgmtObject->resourceDestroy(); - if (!isLink) + // In a cluster, Connections destroyed during shutdown are in + // a cluster-unsafe context. Don't raise an event in that case. + if (!isLink && isClusterSafe()) agent->raiseEvent(_qmf::EventClientDisconnect(mgmtId, ConnectionState::getUserId())); } if (isLink) @@ -202,6 +205,13 @@ void Connection::notifyConnectionForced(const string& text) void Connection::setUserId(const string& userId) { ConnectionState::setUserId(userId); + // In a cluster, the cluster code will raise the connect event + // when the connection is replicated to the cluster. + if (!sys::isCluster()) + raiseConnectEvent(); +} + +void Connection::raiseConnectEvent() { if (mgmtObject != 0) { mgmtObject->set_authIdentity(userId); agent->raiseEvent(_qmf::EventClientConnect(mgmtId, userId)); |
