diff src/org/eclipse/jetty/io/nio/SelectorManager.java @ 950:a778413aefc0

add SaneSelector
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 12 Oct 2016 14:37:56 -0600
parents e9088af3787f
children e542a9cc75ef
line wrap: on
line diff
--- a/src/org/eclipse/jetty/io/nio/SelectorManager.java	Tue Oct 11 23:18:13 2016 -0600
+++ b/src/org/eclipse/jetty/io/nio/SelectorManager.java	Wed Oct 12 14:37:56 2016 -0600
@@ -24,7 +24,6 @@
 import java.nio.channels.ClosedSelectorException;
 import java.nio.channels.SelectableChannel;
 import java.nio.channels.SelectionKey;
-import java.nio.channels.Selector;
 import java.nio.channels.ServerSocketChannel;
 import java.nio.channels.SocketChannel;
 import java.util.ArrayList;
@@ -110,7 +109,6 @@
 		{
 			SelectSet set=sets[s];
 			set.addChange(channel);
-			set.wakeup();
 		}
 	}
 
@@ -234,7 +232,7 @@
 		private final int _setID;
 		private volatile long _now = System.currentTimeMillis();
 
-		private volatile Selector _selector;
+		private volatile SaneSelector _selector;
 
 		private volatile Thread _selecting;
 		private int _busySelects;
@@ -251,14 +249,14 @@
 			_idleTick = System.currentTimeMillis();
 
 			// create a selector;
-			_selector = Selector.open();
+			_selector = new SaneSelector();
 			_monitorNext=System.currentTimeMillis()+__MONITOR_PERIOD;
 		}
 
 		private void addChange(SocketChannel channel)
 		{
 			try {
-				SelectionKey key = channel.register(_selector,SelectionKey.OP_READ,null);
+				SelectionKey key = _selector.register(channel,SelectionKey.OP_READ,null);
 				SelectChannelEndPoint endpoint = createEndPoint(channel,key);
 				key.attach(endpoint);
 				endpoint.schedule();
@@ -282,19 +280,21 @@
 			try
 			{
 				_selecting=Thread.currentThread();
-				final Selector selector=_selector;
+				final SaneSelector selector = _selector;
 				// Stopped concurrently ?
 				if (selector == null)
 					return;
 
 				// Do and instant select to see if any connections can be handled.
-				int selected=selector.selectNow();
+//				int selected = selector.selectNow();
+				int selected = selector.select();
 
 				_now = System.currentTimeMillis();
-
+/*
 				// if no immediate things to do
 				if (selected==0 && selector.selectedKeys().isEmpty())
 				{
+
 					// If we are in pausing mode
 					if (_pausing)
 					{
@@ -317,6 +317,7 @@
 					{
 						long before = _now;
 						selector.select(wait);
+//						selector.select(10000L);
 						_now = System.currentTimeMillis();
 
 						// If we are monitoring for busy selector
@@ -340,7 +341,7 @@
 						}
 					}
 				}
-
+*/
 				// have we been destroyed while sleeping
 				if (_selector==null || !selector.isOpen())
 					return;
@@ -438,7 +439,7 @@
 				selector.selectedKeys().clear();
 
 				_now = System.currentTimeMillis();
-
+/*
 				// Idle tick
 				if (_now-_idleTick>__IDLE_TICK)
 				{
@@ -461,7 +462,7 @@
 					});
 
 				}
-
+*/
 				// Reset busy select monitor counts
 				if (__MONITOR_PERIOD>0 && _now>_monitorNext)
 				{
@@ -497,14 +498,14 @@
 		{
 			return _now;
 		}
-
+/*
 		public void wakeup()
 		{
-			Selector selector = _selector;
+			SaneSelector selector = _selector;
 			if (selector!=null)
 				selector.wakeup();
 		}
-
+*/
 		private SelectChannelEndPoint createEndPoint(SocketChannel channel, SelectionKey sKey) throws IOException
 		{
 			SelectChannelEndPoint endp = new SelectChannelEndPoint(channel,this,sKey, _maxIdleTime);
@@ -521,7 +522,7 @@
 			endp.getConnection().onClose();
 		}
 
-		Selector getSelector()
+		SaneSelector getSelector()
 		{
 			return _selector;
 		}
@@ -530,11 +531,12 @@
 		{
 			// Spin for a while waiting for selector to complete
 			// to avoid unneccessary closed channel exceptions
+/*
 			try
 			{
 				for (int i=0;i<100 && _selecting!=null;i++)
 				{
-					wakeup();
+					_selector.wakeup();
 					Thread.sleep(10);
 				}
 			}
@@ -542,11 +544,11 @@
 			{
 				LOG.warn("",e);
 			}
-
+*/
 			// close endpoints and selector
 			synchronized (this)
 			{
-				Selector selector=_selector;
+				SaneSelector selector=_selector;
 				for (SelectionKey key:selector.keys())
 				{
 					if (key==null)
@@ -593,7 +595,7 @@
 
 		public String toString()
 		{
-			Selector selector=_selector;
+			SaneSelector selector=_selector;
 			return String.format("%s keys=%d selected=%d",
 					super.toString(),
 					selector != null && selector.isOpen() ? selector.keys().size() : -1,