Author: rgodfrey
Date: Thu Oct 29 16:59:45 2015
New Revision: 1711301

URL: http://svn.apache.org/viewvc?rev=1711301&view=rev
Log:
QPID-6794 : Ensure connection is always added back to the selector it is 
currently assigned to - otherwise connections are assigned to all selectors, 
and deadlocks can occur

Modified:
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NetworkConnectionScheduler.java
    
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NetworkConnectionScheduler.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NetworkConnectionScheduler.java?rev=1711301&r1=1711300&r2=1711301&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NetworkConnectionScheduler.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/NetworkConnectionScheduler.java
 Thu Oct 29 16:59:45 2015
@@ -134,7 +134,7 @@ public class NetworkConnectionScheduler
                         }
                         else
                         {
-                            _selectorThread.addConnection(connection);
+                            
_selectorThread.returnConnectionToSelector(connection);
                         }
                     }
                 }

Modified: 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java?rev=1711301&r1=1711300&r2=1711301&view=diff
==============================================================================
--- 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java
 (original)
+++ 
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java
 Thu Oct 29 16:59:45 2015
@@ -490,6 +490,21 @@ class SelectorThread extends Thread
 
     }
 
+    public void returnConnectionToSelector(final NonBlockingConnection 
connection)
+    {
+        if(selectionInterestRequiresUpdate(connection))
+        {
+            SelectionTask selectionTask = connection.getSelectionTask();
+            if(selectionTask == null)
+            {
+                throw new IllegalStateException("returnConnectionToSelector 
should only be called with connections that are currently assigned a selector 
task");
+            }
+            selectionTask.getUnregisteredConnections().add(connection);
+            selectionTask.wakeup();
+        }
+
+    }
+
     private SelectionTask getNextSelectionTask()
     {
         int index;



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

Reply via email to