Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Wilkins2009-04-30 03:24:06 +0000
committerGreg Wilkins2009-04-30 03:24:06 +0000
commit14c38b8346bd70bb5c8306ce354699042ca19693 (patch)
tree2de5f9ed2b7f5cc035928a8199742f21a42d4896
parent456a00161b47b8a3a13fc253c3a94ccacd69ea3b (diff)
downloadorg.eclipse.jetty.project-14c38b8346bd70bb5c8306ce354699042ca19693.tar.gz
org.eclipse.jetty.project-14c38b8346bd70bb5c8306ce354699042ca19693.tar.xz
org.eclipse.jetty.project-14c38b8346bd70bb5c8306ce354699042ca19693.zip
JETTY-937
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@200 7e9141cc-0065-0410-87d8-b60c137991c4
-rw-r--r--VERSION.txt1
-rw-r--r--jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectorManager.java62
2 files changed, 44 insertions, 19 deletions
diff --git a/VERSION.txt b/VERSION.txt
index cfe43c83e3..2ab0ba3444 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1,4 +1,5 @@
jetty-7.0.0.M2-SNAPSHOT
+ + JETTY-937 Work around Sun JVM bugs
+ JETTY-941 Linux chkconfig hint
+ JETTY-959 CGI servlet doesn't kill the CGI in case the client disconnects
+ JETTY-980 Fixed ResourceHandler ? handling, and bad URI creation in listings
diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectorManager.java b/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectorManager.java
index b3f200fb63..a146089258 100644
--- a/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectorManager.java
+++ b/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectorManager.java
@@ -47,6 +47,8 @@ public abstract class SelectorManager extends AbstractLifeCycle
private transient SelectSet[] _selectSet;
private int _selectSets=1;
private volatile int _set;
+ private boolean _jvmBug0;
+ private boolean _jvmBug1;
/* ------------------------------------------------------------ */
@@ -420,34 +422,33 @@ public abstract class SelectorManager extends AbstractLifeCycle
_idleTimeout.setNow(now);
_timeout.setNow(now);
- // Look for JVM bug http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6403933
+ // Look for JVM bugs
+ // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6403933
if (selected==0 && (now-before)<wait/2)
{
_jvmBug++;
- if (_jvmBug>4)
+ if (_jvmBug>16)
{
- // Probably JVM BUG!
- for (SelectionKey key: selector.keys())
- {
- if (key.interestOps()==0 && key.isValid())
- key.cancel();
- }
- selector.selectNow();
- }
- else if (_jvmBug>8)
- {
- // BLOODY SUN!!! Try refreshing the entire selector.
synchronized (this)
{
- System.err.println("SUN BUG WORKAROUND!!!!");
- final Selector new_selector = Selector.open();
+ if (_jvmBug1)
+ Log.debug("seeing JVM BUG(s) - recreating selector");
+ else
+ {
+ _jvmBug1=true;
+ Log.info("seeing JVM BUG(s) - recreating selector");
+ }
- for (SelectionKey key : _selector.keys())
+ // BLOODY SUN BUG !!! Try refreshing the entire selector.
+ final Selector new_selector = Selector.open();
+ Iterator iterator = _selector.keys().iterator();
+ while (iterator.hasNext())
{
- final SocketChannel channel = (SocketChannel)key.channel();
- final Object attachment = key.attachment();
+ SelectionKey k = (SelectionKey)iterator.next();
+ final SelectableChannel channel = k.channel();
+ final Object attachment = k.attachment();
- key.cancel();
+ k.cancel();
if (attachment==null)
addChange(channel);
else
@@ -455,8 +456,31 @@ public abstract class SelectorManager extends AbstractLifeCycle
}
_selector.close();
_selector=new_selector;
+ return;
+ }
+ }
+ else if (_jvmBug>8)
+ {
+ // Cancel keys with 0 interested ops
+ if (_jvmBug0)
+ Log.debug("seeing JVM BUG(s) - cancelling interestOps==0");
+ else
+ {
+ _jvmBug0=true;
+ Log.info("seeing JVM BUG(s) - cancelling interestOps==0");
+ }
+ Iterator iter = selector.keys().iterator();
+ while(iter.hasNext())
+ {
+ SelectionKey k = (SelectionKey) iter.next();
+ if (k.isValid()&&k.interestOps()==0)
+ {
+ k.cancel();
+ }
}
+ return;
}
+
}
else
_jvmBug=0;

Back to the top