summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2011-10-30 18:42:37 +0000
committerRobert Gemmell <robbie@apache.org>2011-10-30 18:42:37 +0000
commit7e185ac8cc310718ac8f492df1d4c787cce95d3d (patch)
tree8f475af6e5cf266fccbb66d0bf138163e965d71f
parentef18e29768d66d87ae9895f97773d2dd98fa50fd (diff)
downloadqpid-python-7e185ac8cc310718ac8f492df1d4c787cce95d3d.tar.gz
QPID-3428: update to stop duplicate 0-10 session registrations into the management layer, fixes a leak of the session and its associated connection at session removal time.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1195212 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQConnectionModel.java2
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java3
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java2
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java10
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java4
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java7
6 files changed, 18 insertions, 10 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQConnectionModel.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQConnectionModel.java
index b51e6aff1a..bc0d4e3bcc 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQConnectionModel.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQConnectionModel.java
@@ -72,5 +72,5 @@ public interface AMQConnectionModel extends StatisticsGatherer
public String getUserName();
- public boolean isSessionNameUnique(String name);
+ public boolean isSessionNameUnique(byte[] name);
}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java
index bff0a79de1..b960ce8608 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java
@@ -1396,8 +1396,9 @@ public class AMQProtocolEngine implements ServerProtocolEngine, Managable, AMQPr
}
@Override
- public boolean isSessionNameUnique(String name)
+ public boolean isSessionNameUnique(byte[] name)
{
+ // 0-8/0-9/0-9-1 sessions don't have names
return true;
}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java
index d83013afba..e428baeebe 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnection.java
@@ -389,7 +389,7 @@ public class ServerConnection extends Connection implements AMQConnectionModel,
}
@Override
- public boolean isSessionNameUnique(String name)
+ public boolean isSessionNameUnique(byte[] name)
{
return !super.hasSessionWithName(name);
}
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java
index 2de8a0425e..1e149c4d76 100644
--- a/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java
+++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java
@@ -234,22 +234,22 @@ public class ServerConnectionDelegate extends ServerDelegate
@Override
public void sessionAttach(final Connection conn, final SessionAttach atc)
{
- final String clientId = new String(atc.getName());
- final Session ssn = getSession(conn, atc);
+ final Session ssn;
- if(isSessionNameUnique(clientId,conn))
+ if(isSessionNameUnique(atc.getName(), conn))
{
+ ssn = sessionAttachImpl(conn, atc);
conn.registerSession(ssn);
- super.sessionAttach(conn, atc);
}
else
{
+ ssn = getSession(conn, atc);
ssn.invoke(new SessionDetached(atc.getName(), SessionDetachCode.SESSION_BUSY));
ssn.closed();
}
}
- private boolean isSessionNameUnique(final String name, final Connection conn)
+ private boolean isSessionNameUnique(final byte[] name, final Connection conn)
{
final ServerConnection sconn = (ServerConnection) conn;
final String userId = sconn.getUserName();
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java
index 06c5c83031..b78433052c 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java
@@ -697,9 +697,9 @@ public class Connection extends ConnectionInvoker
return channels.values();
}
- public boolean hasSessionWithName(final String name)
+ public boolean hasSessionWithName(final byte[] name)
{
- return sessions.containsKey(new Binary(name.getBytes()));
+ return sessions.containsKey(new Binary(name));
}
public void notifyFailoverRequired()
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java
index 82fa6ca473..07d21c9904 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java
@@ -195,10 +195,17 @@ public class ServerDelegate extends ConnectionDelegate
@Override
public void sessionAttach(Connection conn, SessionAttach atc)
{
+ sessionAttachImpl(conn, atc);
+ }
+
+ protected Session sessionAttachImpl(Connection conn, SessionAttach atc)
+ {
Session ssn = getSession(conn, atc);
conn.map(ssn, atc.getChannel());
ssn.sessionAttached(atc.getName());
ssn.setState(Session.State.OPEN);
+
+ return ssn;
}
protected void setConnectionTuneOkChannelMax(final Connection conn, final int okChannelMax)