You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2010/01/13 11:30:51 UTC
svn commit: r898705 - in /tomcat/tc6.0.x/trunk: ./
java/org/apache/coyote/http11/ java/org/apache/tomcat/util/net/ webapps/docs/
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org