You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/05/12 22:46:37 UTC

svn commit: r774076 - /incubator/cassandra/trunk/src/java/org/apache/cassandra/net/SelectorManager.java

Author: jbellis
Date: Tue May 12 20:46:36 2009
New Revision: 774076

URL: http://svn.apache.org/viewvc?rev=774076&view=rev
Log:
another workaround for register/select wonkiness.  patch by jbellis; tested by Mark Robson for CASSANDRA-156

Modified:
    incubator/cassandra/trunk/src/java/org/apache/cassandra/net/SelectorManager.java

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/net/SelectorManager.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/net/SelectorManager.java?rev=774076&r1=774075&r2=774076&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/net/SelectorManager.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/net/SelectorManager.java Tue May 12 20:46:36 2009
@@ -32,6 +32,9 @@
     // the underlying selector used
     protected Selector selector;
 
+    // workaround JDK select/register bug
+    Object gate = new Object();
+
     // The static selector manager which is used by all applications
     private static SelectorManager manager;
     
@@ -71,12 +74,14 @@
     public SelectionKey register(SelectableChannel channel,
             SelectionKeyHandler handler, int ops) throws IOException
     {
-        if ((channel == null) || (handler == null))
+        assert channel != null;
+        assert handler != null;
+
+        synchronized(gate)
         {
-            throw new NullPointerException();
+            selector.wakeup();
+            return channel.register(selector, ops, handler);
         }
-
-        return channel.register(selector, ops, handler);
     }      
 
     /**
@@ -91,6 +96,7 @@
             {
                 selector.select(100);
                 doProcess();
+                synchronized(gate) {}
             }
             catch (IOException e)
             {