fix for AMQ-839 - lets not use == but compare the connectionIDs by value when removing a clientID

git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@426764 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
James Strachan 2006-07-29 08:03:31 +00:00
parent 73d14ce879
commit cb77064b88
1 changed files with 10 additions and 3 deletions

View File

@ -28,6 +28,7 @@ import org.apache.activemq.broker.region.policy.PolicyMap;
import org.apache.activemq.command.ActiveMQDestination; import org.apache.activemq.command.ActiveMQDestination;
import org.apache.activemq.command.BrokerId; import org.apache.activemq.command.BrokerId;
import org.apache.activemq.command.BrokerInfo; import org.apache.activemq.command.BrokerInfo;
import org.apache.activemq.command.ConnectionId;
import org.apache.activemq.command.ConnectionInfo; import org.apache.activemq.command.ConnectionInfo;
import org.apache.activemq.command.ConsumerInfo; import org.apache.activemq.command.ConsumerInfo;
import org.apache.activemq.command.DestinationInfo; import org.apache.activemq.command.DestinationInfo;
@ -209,14 +210,20 @@ public class RegionBroker implements Broker {
synchronized (clientIdSet) { synchronized (clientIdSet) {
ConnectionInfo oldValue = (ConnectionInfo) clientIdSet.get(clientId); ConnectionInfo oldValue = (ConnectionInfo) clientIdSet.get(clientId);
// we may be removing the duplicate connection, not the first connection to be created // we may be removing the duplicate connection, not the first connection to be created
if (oldValue == info) { // so lets check that their connection IDs are the same
clientIdSet.remove(clientId); if (oldValue != null) {
if (isEqual(oldValue.getConnectionId(), info.getConnectionId())) {
clientIdSet.remove(clientId);
}
} }
} }
connections.remove(context.getConnection()); connections.remove(context.getConnection());
} }
protected boolean isEqual(ConnectionId connectionId, ConnectionId connectionId2) {
return connectionId == connectionId2 || (connectionId != null && connectionId.equals(connectionId2));
}
public Connection[] getClients() throws Exception { public Connection[] getClients() throws Exception {
ArrayList l = new ArrayList(connections); ArrayList l = new ArrayList(connections);
Connection rc[] = new Connection[l.size()]; Connection rc[] = new Connection[l.size()];