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