From 752fcea16ac47aa1fb0036c0dd7e81d7585e9fbc Mon Sep 17 00:00:00 2001 From: markt Date: Fri, 1 Oct 2010 14:54:53 +0000 Subject: [PATCH] https://issues.apache.org/bugzilla/show_bug.cgi?id=49890 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 | 13 +++++++++++++ java/org/apache/tomcat/util/net/res/LocalStrings.properties | 2 ++ webapps/docs/changelog.xml | 8 +++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java b/java/org/apache/tomcat/util/net/NioEndpoint.java index a657192b8..ef998ae8b 100644 --- a/java/org/apache/tomcat/util/net/NioEndpoint.java +++ b/java/org/apache/tomcat/util/net/NioEndpoint.java @@ -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); } diff --git a/java/org/apache/tomcat/util/net/res/LocalStrings.properties b/java/org/apache/tomcat/util/net/res/LocalStrings.properties index bb7031616..2d059109d 100644 --- a/java/org/apache/tomcat/util/net/res/LocalStrings.properties +++ b/java/org/apache/tomcat/util/net/res/LocalStrings.properties @@ -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 diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index e4b76405b..40111a733 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -59,7 +59,7 @@ 49209: Prevent possible AccessControlException during undeployment when running with a security manager. Patch provided by - Sylvain Laurent. + Sylvain Laurent. (markt) 49657: Handle CGI executables with spaces in the path. @@ -239,6 +239,12 @@ 49860: Add support for trailing headers in chunked HTTP requests. (markt) + + 49890: 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) + -- 2.11.0