You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2014/03/05 15:37:38 UTC

svn commit: r1574508 - in /tomcat/trunk: java/org/apache/catalina/loader/LocalStrings.properties java/org/apache/catalina/loader/WebappClassLoader.java webapps/docs/changelog.xml

Author: kkolinko
Date: Wed Mar  5 14:37:38 2014
New Revision: 1574508

URL: http://svn.apache.org/r1574508
Log:
When reporting threads that are still running while web application is being stopped, print their stack traces to the log.

Minor fixes:
Remember result of Thread.getName() as that method is not trivial.
Strip trailing whitespaces from changelog.

Modified:
    tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties
    tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties?rev=1574508&r1=1574507&r2=1574508&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties Wed Mar  5 14:37:38 2014
@@ -39,6 +39,8 @@ webappClassLoader.jarsModified=One or mo
 webappClassLoader.jarsRemoved=One or more JARs have been removed from the web application [{0}]
 webappClassLoader.javaseClassLoaderNull=The j2seClassLoader attribute may not be null
 webappClassLoader.resourceModified=Resource [{0}] has been modified. The last modified time was [{1}] and is now [{2}]
+webappClassLoader.stackTrace=Stack trace of thread "{0}":{1}
+webappClassLoader.stackTraceRequestThread=Stack trace of request processing thread "{0}":{1}
 webappClassLoader.stopThreadFail=Failed to terminate thread named [{0}] for web application [{1}]
 webappClassLoader.stopTimerThreadFail=Failed to terminate TimerThread named [{0}] for web application [{1}]
 webappClassLoader.validationErrorJarPath=Unable to validate JAR entry with name {0}

Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1574508&r1=1574507&r2=1574508&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Wed Mar  5 14:37:38 2014
@@ -1772,6 +1772,8 @@ public class WebappClassLoader extends U
                         continue;
                     }
 
+                    final String threadName = thread.getName();
+
                     // JVM controlled threads
                     ThreadGroup tg = thread.getThreadGroup();
                     if (tg != null &&
@@ -1779,7 +1781,7 @@ public class WebappClassLoader extends U
 
                         // HttpClient keep-alive threads
                         if (clearReferencesHttpClientKeepAliveThread &&
-                                thread.getName().equals("Keep-Alive-Timer")) {
+                                threadName.equals("Keep-Alive-Timer")) {
                             thread.setContextClassLoader(parent);
                             log.debug(sm.getString(
                                     "webappClassLoader.checkThreadsHttpClient"));
@@ -1805,10 +1807,14 @@ public class WebappClassLoader extends U
 
                     if (isRequestThread(thread)) {
                         log.error(sm.getString("webappClassLoader.warnRequestThread",
-                                getContextName(), thread.getName()));
+                                getContextName(), threadName));
+                        log.error(sm.getString("webappClassLoader.stackTraceRequestThread",
+                                threadName, getStackTrace(thread)));
                     } else {
                         log.error(sm.getString("webappClassLoader.warnThread",
-                                getContextName(), thread.getName()));
+                                getContextName(), threadName));
+                        log.error(sm.getString("webappClassLoader.stackTrace",
+                                threadName, getStackTrace(thread)));
                     }
 
                     // Don't try an stop the threads unless explicitly
@@ -2125,6 +2131,14 @@ public class WebappClassLoader extends U
         return name;
     }
 
+    private String getStackTrace(Thread thread) {
+        StringBuilder builder = new StringBuilder();
+        for (StackTraceElement ste : thread.getStackTrace()) {
+            builder.append("\n ").append(ste);
+        }
+        return builder.toString();
+    }
+
     /**
      * @param o object to test, may be null
      * @return <code>true</code> if o has been loaded by the current classloader

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1574508&r1=1574507&r2=1574508&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Mar  5 14:37:38 2014
@@ -79,8 +79,13 @@
         invalid request for a resource outside of the web application. (markt)
       </fix>
       <fix>
-        Remove an unnecessary null check identified by FindBugs. (markt) 
+        Remove an unnecessary null check identified by FindBugs. (markt)
       </fix>
+      <add>
+        In WebappClassLoader, when reporting threads that are still running
+        while web application is being stopped, print their stack traces to
+        the log. (kkolinko)
+      </add>
     </changelog>
   </subsection>
   <subsection name="Coyote">
@@ -112,7 +117,7 @@
         (markt)
       </fix>
       <fix>
-        Remove an unnecessary null check identified by FindBugs. (markt) 
+        Remove an unnecessary null check identified by FindBugs. (markt)
       </fix>
     </changelog>
   </subsection>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org