335641 added a sweep to check for error
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@2728 7e9141cc-0065-0410-87d8-b60c137991c4
This commit is contained in:
parent
210fc406b8
commit
0b41841e0a
|
@ -51,6 +51,7 @@ public class SelectChannelEndPoint extends ChannelEndPoint implements AsyncEndPo
|
|||
private boolean _writeBlocked;
|
||||
private boolean _open;
|
||||
private volatile long _idleTimestamp;
|
||||
private boolean _changing=false;
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
public SelectChannelEndPoint(SocketChannel channel, SelectSet selectSet, SelectionKey key, int maxIdleTime)
|
||||
|
@ -423,6 +424,7 @@ public class SelectChannelEndPoint extends ChannelEndPoint implements AsyncEndPo
|
|||
|
||||
if(_interestOps == ops && getChannel().isOpen())
|
||||
return;
|
||||
_changing=true;
|
||||
}
|
||||
_selectSet.addChange(this);
|
||||
_selectSet.wakeup();
|
||||
|
@ -436,6 +438,7 @@ public class SelectChannelEndPoint extends ChannelEndPoint implements AsyncEndPo
|
|||
{
|
||||
synchronized (this)
|
||||
{
|
||||
_changing=false;
|
||||
if (getChannel().isOpen())
|
||||
{
|
||||
if (_interestOps>0)
|
||||
|
@ -612,4 +615,22 @@ public class SelectChannelEndPoint extends ChannelEndPoint implements AsyncEndPo
|
|||
{
|
||||
_maxIdleTime=timeMs;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/**
|
||||
* This looks for undispatched endpoints that have key.interestOps!=endp.interestOps
|
||||
* @TODO find out the root cause of this and delete this method.
|
||||
*/
|
||||
public void checkKey(SelectionKey key)
|
||||
{
|
||||
synchronized (this)
|
||||
{
|
||||
if (!_changing && !_dispatched && key.interestOps()!=_interestOps)
|
||||
{
|
||||
Log.warn("NIO InterestOps mismatch "+key.interestOps()+"!="+_interestOps+" for "+this);
|
||||
updateKey();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -22,7 +22,6 @@ import java.nio.channels.ServerSocketChannel;
|
|||
import java.nio.channels.SocketChannel;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
@ -562,6 +561,16 @@ public abstract class SelectorManager extends AbstractLifeCycle implements Dumpa
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
// TODO find root cause and remove this
|
||||
// This looks for undispatched endpoints that have key.interestOps!=endp.interestOps
|
||||
for (SelectionKey key: selector.keys())
|
||||
{
|
||||
if (key.isValid() && key.attachment() instanceof SelectChannelEndPoint)
|
||||
{
|
||||
((SelectChannelEndPoint)key.attachment()).checkKey(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (CancelledKeyException e)
|
||||
|
@ -881,7 +890,8 @@ public abstract class SelectorManager extends AbstractLifeCycle implements Dumpa
|
|||
}
|
||||
AggregateLifeCycle.dump(out,indent,dump);
|
||||
}
|
||||
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
public void dumpKeyState(List<Object> dumpto)
|
||||
{
|
||||
Selector selector=_selector;
|
||||
|
|
|
@ -152,6 +152,7 @@ public class StressTest
|
|||
{
|
||||
final int id=i;
|
||||
final String name = "T"+i;
|
||||
Thread.sleep(_random.nextInt(100));
|
||||
threads[i]=new Thread()
|
||||
{
|
||||
@Override
|
||||
|
@ -305,8 +306,8 @@ public class StressTest
|
|||
{
|
||||
_loops[thread].set(i);
|
||||
doPaths(thread,name+"-"+i,persistent);
|
||||
Thread.sleep(1+_random.nextInt(10)*_random.nextInt(10));
|
||||
Thread.sleep(10);
|
||||
Thread.sleep(1+_random.nextInt(20)*_random.nextInt(20));
|
||||
Thread.sleep(20);
|
||||
}
|
||||
_loops[thread].set(loops);
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ import java.io.UnsupportedEncodingException;
|
|||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.Arrays;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.Vector;
|
||||
|
||||
|
@ -145,18 +144,15 @@ public class Classpath {
|
|||
|
||||
private static class Loader extends URLClassLoader
|
||||
{
|
||||
String name;
|
||||
|
||||
Loader(URL[] urls, ClassLoader parent)
|
||||
{
|
||||
super(urls, parent);
|
||||
name = "StartLoader"+Arrays.asList(urls);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return name;
|
||||
return "startJarLoader@"+Long.toHexString(hashCode());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue