Author: kkolinko
Date: Thu Jul 17 23:13:05 2014
New Revision: 1611509

URL: http://svn.apache.org/r1611509
Log:
Fix http://issues.apache.org/bugzilla/show_bug.cgi?id=56724
Write an error message to Tomcat logs if container background thread exits 
unexpectedly.
It is backport of r1611506 from tomcat/trunk.

Modified:
    tomcat/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ContainerBase.java
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/LocalStrings.properties
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
  Merged /tomcat/trunk:r1611506

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ContainerBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ContainerBase.java?rev=1611509&r1=1611508&r2=1611509&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ContainerBase.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/ContainerBase.java Thu 
Jul 17 23:13:05 2014
@@ -1503,20 +1503,37 @@ public abstract class ContainerBase exte
 
         @Override
         public void run() {
-            while (!threadDone) {
-                try {
-                    Thread.sleep(backgroundProcessorDelay * 1000L);
-                } catch (InterruptedException e) {
-                    // Ignore
+            Throwable t = null;
+            String unexpectedDeathMessage = sm.getString(
+                    "containerBase.backgroundProcess.unexpectedThreadDeath",
+                    Thread.currentThread().getName());
+            try {
+                while (!threadDone) {
+                    try {
+                        Thread.sleep(backgroundProcessorDelay * 1000L);
+                    } catch (InterruptedException e) {
+                        // Ignore
+                    }
+                    if (!threadDone) {
+                        Container parent = (Container) getMappingObject();
+                        ClassLoader cl = 
+                            Thread.currentThread().getContextClassLoader();
+                        if (parent.getLoader() != null) {
+                            cl = parent.getLoader().getClassLoader();
+                        }
+                        processChildren(parent, cl);
+                    }
                 }
+            } catch (RuntimeException e) {
+                t = e;
+                throw e;
+            } catch (Error e) {
+                t = e;
+                throw e;
+            } finally {
+                thread = null;
                 if (!threadDone) {
-                    Container parent = (Container) getMappingObject();
-                    ClassLoader cl = 
-                        Thread.currentThread().getContextClassLoader();
-                    if (parent.getLoader() != null) {
-                        cl = parent.getLoader().getClassLoader();
-                    }
-                    processChildren(parent, cl);
+                    log.error(unexpectedDeathMessage, t);
                 }
             }
         }

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/LocalStrings.properties?rev=1611509&r1=1611508&r2=1611509&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/LocalStrings.properties 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/LocalStrings.properties 
Thu Jul 17 23:13:05 2014
@@ -88,6 +88,7 @@ containerBase.backgroundProcess.loader=E
 containerBase.backgroundProcess.manager=Exception processing manager {0} 
background process
 containerBase.backgroundProcess.realm=Exception processing realm {0} 
background process
 containerBase.backgroundProcess.valve=Exception processing valve {0} 
background process
+containerBase.backgroundProcess.unexpectedThreadDeath=Unexpected death of 
background thread {0}
 defaultInstanceManager.invalidInjection=Invalid method resource injection 
annotation
 fastEngineMapper.alreadyStarted=FastEngineMapper {0} has already been started
 fastEngineMapper.notStarted=FastEngineMapper {0} has not yet been started

Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1611509&r1=1611508&r2=1611509&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Thu Jul 17 23:13:05 2014
@@ -172,6 +172,10 @@
         <code>MapperListener</code> during repeated starts of embedded Tomcat.
         (kkolinko)
       </fix>
+      <add>
+        <bug>56724</bug>: Write an error message to Tomcat logs if container
+        background thread is aborted unexpectedly. (kkolinko)
+      </add>
     </changelog>
   </subsection>
   <subsection name="Coyote">



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

Reply via email to