You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2017/12/12 17:09:59 UTC

qpid-broker-j git commit: QPID-8047: [Broker-J][AMQP 0-10] Fix NPE on receiving session.detach for unknown session

Repository: qpid-broker-j
Updated Branches:
  refs/heads/7.0.x 6747c7dbc -> 476589e4c


QPID-8047: [Broker-J][AMQP 0-10] Fix NPE on receiving session.detach for unknown session

Only change fixing the issue is merged from master commit c37376a2a8e139893d5442266c7bcb218ab18ce8


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/476589e4
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/476589e4
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/476589e4

Branch: refs/heads/7.0.x
Commit: 476589e4cc1df93987843f9233ea926cdbaf73d5
Parents: 6747c7d
Author: Alex Rudyy <or...@apache.org>
Authored: Tue Dec 5 11:17:23 2017 +0000
Committer: Alex Rudyy <or...@apache.org>
Committed: Tue Dec 12 17:06:56 2017 +0000

----------------------------------------------------------------------
 .../v0_10/ServerConnectionDelegate.java         | 30 ++++++++++++++------
 1 file changed, 22 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/476589e4/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java b/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
index cab769f..43c3bf1 100644
--- a/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
+++ b/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
@@ -363,17 +363,31 @@ public class ServerConnectionDelegate extends MethodDelegate<ServerConnection> i
     @Override
     public void sessionDetach(ServerConnection conn, SessionDetach dtc)
     {
-        stopAllSubscriptions(conn, dtc);
-        ServerSession ssn = conn.getSession(dtc.getChannel());
-        ssn.setClose(true);
-        ssn.sessionDetached(dtc.getName(), ssn.getDetachCode() == null? SessionDetachCode.NORMAL: ssn.getDetachCode());
-        conn.unmap(ssn);
-        ssn.closed();
+        int channel = dtc.getChannel();
+        ServerSession ssn = conn.getSession(channel);
+        if (ssn != null)
+        {
+            stopAllSubscriptions(ssn);
+            ssn.setClose(true);
+            ssn.sessionDetached(dtc.getName(),
+                                ssn.getDetachCode() == null ? SessionDetachCode.NORMAL : ssn.getDetachCode());
+            conn.unmap(ssn);
+            ssn.closed();
+        }
+        else
+        {
+            if(LOGGER.isDebugEnabled())
+            {
+                LOGGER.debug("SessionDetach received on unattached channel : {}", channel);
+            }
+            SessionDetached sessionDetached = new SessionDetached(dtc.getName(), SessionDetachCode.NOT_ATTACHED);
+            sessionDetached.setChannel(channel);
+            conn.invoke(sessionDetached);
+        }
     }
 
-    private void stopAllSubscriptions(ServerConnection conn, SessionDetach dtc)
+    private void stopAllSubscriptions(final ServerSession ssn)
     {
-        final ServerSession ssn = conn.getSession(dtc.getChannel());
         final Collection<ConsumerTarget_0_10> subs = ssn.getSubscriptions();
         for (ConsumerTarget_0_10 subscription_0_10 : subs)
         {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org