Author: markt Date: Wed Jan 13 10:30:50 2010 New Revision: 898705 URL: http://svn.apache.org/viewvc?rev=898705&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48470 Ensure Tomcat does not lock up if shut down under load.
Modified: tomcat/tc6.0.x/trunk/STATUS.txt tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Modified: tomcat/tc6.0.x/trunk/STATUS.txt URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=898705&r1=898704&r2=898705&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/STATUS.txt (original) +++ tomcat/tc6.0.x/trunk/STATUS.txt Wed Jan 13 10:30:50 2010 @@ -151,14 +151,6 @@ +1: kkolinko, markt, rjung -1: -* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48470 - Ensure shutdown does not lock up when Tomcat is shut down under load - https://issues.apache.org/bugzilla/attachment.cgi?id=24827 - +1: markt, jim, kkolinko - -1: - kkolinko: I have several comments in BZ 48470#c6, but those can be - proposed separately - * Fix various EL issues (with test cases) including BZ47413#c8 & BZ48112 The actual fixes svn copy https://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/jasper/compiler/AttributeParser.java Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=898705&r1=898704&r2=898705&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java Wed Jan 13 10:30:50 2010 @@ -226,6 +226,11 @@ public int getSoTimeout() { return endpoint.getSoTimeout(); } public void setSoTimeout(int soTimeout) { endpoint.setSoTimeout(soTimeout); } + public int getUnlockTimeout() { return endpoint.getUnlockTimeout(); } + public void setUnlockTimeout(int unlockTimeout) { + endpoint.setUnlockTimeout(unlockTimeout); + } + /** * The number of seconds Tomcat will wait for a subsequent request * before closing the connection. Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java?rev=898705&r1=898704&r2=898705&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java Wed Jan 13 10:30:50 2010 @@ -426,6 +426,11 @@ public int getSoTimeout() { return endpoint.getSoTimeout(); } public void setSoTimeout(int soTimeout) { endpoint.setSoTimeout(soTimeout); } + public int getUnlockTimeout() { return endpoint.getUnlockTimeout(); } + public void setUnlockTimeout(int unlockTimeout) { + endpoint.setUnlockTimeout(unlockTimeout); + } + // HTTP /** * Return the Keep-Alive policy for the connection. Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=898705&r1=898704&r2=898705&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Wed Jan 13 10:30:50 2010 @@ -18,6 +18,7 @@ package org.apache.tomcat.util.net; import java.net.InetAddress; +import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.HashMap; import java.util.concurrent.Executor; @@ -399,6 +400,16 @@ /** + * Unlock timeout. + */ + protected int unlockTimeout = 250; + public int getUnlockTimeout() { return unlockTimeout; } + public void setUnlockTimeout(int unlockTimeout) { + this.unlockTimeout = unlockTimeout; + } + + + /** * SSL engine. */ protected boolean SSLEnabled = false; @@ -880,16 +891,21 @@ */ protected void unlockAccept() { java.net.Socket s = null; + InetSocketAddress saddr = null; try { // Need to create a connection to unlock the accept(); if (address == null) { - s = new java.net.Socket(InetAddress.getByName("localhost").getHostAddress(), port); + saddr = new InetSocketAddress("localhost", port); } else { - s = new java.net.Socket(address, port); - // setting soLinger to a small value will help shutdown the - // connection quicker - s.setSoLinger(true, 0); + saddr = new InetSocketAddress(address,port); + } + s = new java.net.Socket(); + s.setSoTimeout(soTimeout); + s.setSoLinger(true ,0); + if (log.isDebugEnabled()) { + log.debug("About to unlock socket for: " + saddr); } + s.connect(saddr, unlockTimeout); } catch(Exception e) { if (log.isDebugEnabled()) { log.debug(sm.getString("endpoint.debug.unlock", "" + port), e); Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java?rev=898705&r1=898704&r2=898705&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java Wed Jan 13 10:30:50 2010 @@ -20,6 +20,7 @@ import java.io.IOException; import java.net.BindException; import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.Executor; @@ -261,6 +262,16 @@ public ServerSocketFactory getServerSocketFactory() { return serverSocketFactory; } + /** + * Unlock timeout. + */ + protected int unlockTimeout = 250; + public int getUnlockTimeout() { return unlockTimeout; } + public void setUnlockTimeout(int unlockTimeout) { + this.unlockTimeout = unlockTimeout; + } + + public boolean isRunning() { return running; } @@ -617,16 +628,24 @@ */ protected void unlockAccept() { Socket s = null; + InetSocketAddress saddr = null; try { // Need to create a connection to unlock the accept(); if (address == null) { - s = new Socket(InetAddress.getByName("localhost").getHostAddress(), port); + saddr = new InetSocketAddress("localhost", port); } else { - s = new Socket(address, port); - // setting soLinger to a small value will help shutdown the - // connection quicker - s.setSoLinger(true, 0); + saddr = new InetSocketAddress(address,port); + } + s = new java.net.Socket(); + s.setSoTimeout(soTimeout); + s.setSoLinger(true ,0); + if (log.isDebugEnabled()) { + log.debug("About to unlock socket for: " + saddr); } + s.connect(saddr, unlockTimeout); + if (log.isDebugEnabled()) { + log.debug("Socket unlock completed for:"+saddr); + } } catch (Exception e) { if (log.isDebugEnabled()) { log.debug(sm.getString("endpoint.debug.unlock", "" + port), e); Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=898705&r1=898704&r2=898705&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Wed Jan 13 10:30:50 2010 @@ -1048,7 +1048,7 @@ try { // Need to create a connection to unlock the accept(); if (address == null) { - saddr = new InetSocketAddress("127.0.0.1", port); + saddr = new InetSocketAddress("localhost", port); } else { saddr = new InetSocketAddress(address,port); } Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=898705&r1=898704&r2=898705&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Wed Jan 13 10:30:50 2010 @@ -61,12 +61,16 @@ </subsection> <subsection name="Coyote"> <changelog> - <update> + <update> Update version of native bundled in Windows installer to 1.1.19. (mturk) </update> <update> Update recommended version for native to 1.1.19. (rjung) </update> + <fix> + <bug>48470</bug>: Ensure Tomcat does not lock up if shut down under + load. (markt) + </fix> </changelog> </subsection> <subsection name="Webapps"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org