https://issues.apache.org/bugzilla/show_bug.cgi?id=49890
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 1 Oct 2010 14:54:53 +0000 (14:54 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 1 Oct 2010 14:54:53 +0000 (14:54 +0000)
Detect when the JVM bug occurs and log an error asking for more information.

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1003550 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/tomcat/util/net/NioEndpoint.java
java/org/apache/tomcat/util/net/res/LocalStrings.properties
webapps/docs/changelog.xml

index a657192..ef998ae 100644 (file)
@@ -937,6 +937,9 @@ public class NioEndpoint extends AbstractEndpoint {
         
         protected volatile int keyCount = 0;
 
+        private static final int JVM_BUG_THRESHOLD = 16;
+        private volatile int jvmBugCount = 0; 
+        
         public Poller() throws IOException {
             this.selector = Selector.open();
         }
@@ -1088,7 +1091,17 @@ public class NioEndpoint extends AbstractEndpoint {
                             }else {
                                 keyCount = selector.keys().size();
                                 wakeupCounter.set(-1);
+                                long before = System.currentTimeMillis();
                                 keyCount = selector.select(selectorTimeout);
+                                long after = System.currentTimeMillis();
+                                if (keyCount == 0 &&
+                                        (after - before) < selectorTimeout/2) {
+                                    jvmBugCount++;
+                                    if (jvmBugCount > JVM_BUG_THRESHOLD) {
+                                        log.error(sm.getString(
+                                                "endpoint.err.jvmbug"));
+                                    }
+                                }
                             }
                             wakeupCounter.set(0);
                         }
index bb70316..2d05910 100644 (file)
@@ -42,3 +42,5 @@ endpoint.sendfile.error=Unexpected sendfile error
 endpoint.sendfile.addfail=Sendfile failure: [{0}] {1}
 endpoint.sendfile.nosupport=Disabling sendfile, since either the APR version or the system doesn't support it
 endpoint.warn.noInsecureReneg=Secure renegotation is not supported by the SSL library {0}
+endpoint.err.jvmbug=The poller for the NIO connector may have entered an error state triggered by a JVM bug. See bug 49890 for more information. If you see this message with a 1.6.0u18 or later JVM and a 2.6 or later kernel please update the Tomcat bug with exact version information.
+  
\ No newline at end of file
index e4b7640..40111a7 100644 (file)
@@ -59,7 +59,7 @@
       <fix>
         <bug>49209</bug>: Prevent possible AccessControlException during
         undeployment when running with a security manager. Patch provided by
-        Sylvain Laurent.
+        Sylvain Laurent. (markt)
       </fix>
       <fix>
         <bug>49657</bug>: Handle CGI executables with spaces in the path.
         <bug>49860</bug>: Add support for trailing headers in chunked HTTP
         requests. (markt)
       </fix>
+      <add>
+        <bug>49890</bug>: Detect when NIO connector encounters a known JVM bug
+        on Linux and log an error to help determine if the bug is still present
+        ort not. The JVM bug should be fixed for 2.6 kernels and the 1.6.0u18
+        JVMs and later. (markt)
+      </add>
     </changelog>
   </subsection>
   <subsection name="Jasper">