Author: markt
Date: Wed Mar 2 15:19:58 2011
New Revision: 1076249
URL: http://svn.apache.org/viewvc?rev=1076249&view=rev
Log:
Speed up shut down when ThreadLocalLeakPreventionListener is enabled
Modified:
tomcat/trunk/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
tomcat/trunk/webapps/docs/changelog.xml
Modified:
tomcat/trunk/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java?rev=1076249&r1=1076248&r2=1076249&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
Wed Mar 2 15:19:58 2011
@@ -53,10 +53,13 @@ import org.apache.tomcat.util.threads.Th
*
*/
public class ThreadLocalLeakPreventionListener implements LifecycleListener,
- ContainerListener {
+ ContainerListener {
+
private static final Log log =
LogFactory.getLog(ThreadLocalLeakPreventionListener.class);
+ private volatile boolean serverStopping = false;
+
/**
* The string manager for this package.
*/
@@ -72,7 +75,7 @@ public class ThreadLocalLeakPreventionLi
try {
Lifecycle lifecycle = event.getLifecycle();
if (Lifecycle.AFTER_START_EVENT.equals(event.getType()) &&
- lifecycle instanceof Server) {
+ lifecycle instanceof Server) {
// when the server starts, we register ourself as listener for
// all context
// as well as container event listener so that we know when new
@@ -81,8 +84,15 @@ public class ThreadLocalLeakPreventionLi
registerListenersForServer(server);
}
+ if (Lifecycle.BEFORE_STOP_EVENT.equals(event.getType()) &&
+ lifecycle instanceof Server) {
+ // Server is shutting down, so thread pools will be shut down
so
+ // there is no need to clean the threads
+ serverStopping = true;
+ }
+
if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType()) &&
- lifecycle instanceof Context) {
+ lifecycle instanceof Context) {
stopIdleThreads((Context) lifecycle);
}
} catch (Exception e) {
@@ -182,6 +192,8 @@ public class ThreadLocalLeakPreventionLi
* of its parent Service.
*/
private void stopIdleThreads(Context context) {
+ if (serverStopping) return;
+
if (context instanceof StandardContext &&
!((StandardContext) context).getRenewThreadsWhenStoppingContext())
{
log.debug("Not renewing threads when the context is stopping, "
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1076249&r1=1076248&r2=1076249&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Mar 2 15:19:58 2011
@@ -57,6 +57,10 @@
Improve handling of SSL renegotiation by failing earlier when the
request body contains more bytes than maxSavePostSize. (markt)
</fix>
+ <fix>
+ Improve shut down speed by not renewing threads during shut down when
+ the <code>ThreadLocalLeakPreventionListener</code> is enabled. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]