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)
{