You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/02/28 08:48:22 UTC

svn commit: r1294502 - /camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java

Author: davsclaus
Date: Tue Feb 28 07:48:21 2012
New Revision: 1294502

URL: http://svn.apache.org/viewvc?rev=1294502&view=rev
Log:
CAMEL-5042: Shutting down a thread pool should remove the pool from the internal reference list

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java?rev=1294502&r1=1294501&r2=1294502&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExecutorServiceManager.java Tue Feb 28 07:48:21 2012
@@ -264,6 +264,10 @@ public class DefaultExecutorServiceManag
 
     @Override
     public List<Runnable> shutdownNow(ExecutorService executorService) {
+        return doShutdownNow(executorService, true);
+    }
+
+    private List<Runnable> doShutdownNow(ExecutorService executorService, boolean remove) {
         ObjectHelper.notNull(executorService, "executorService");
 
         List<Runnable> answer = null;
@@ -281,7 +285,9 @@ public class DefaultExecutorServiceManag
         }
 
         // remove reference as its shutdown
-        executorServices.remove(executorService);
+        if (remove) {
+            executorServices.remove(executorService);
+        }
 
         return answer;
     }
@@ -310,11 +316,12 @@ public class DefaultExecutorServiceManag
 
     @Override
     protected void doShutdown() throws Exception {
-        // shutdown all executor services
+        // shutdown all executor services by looping
         for (ExecutorService executorService : executorServices) {
             // only log if something goes wrong as we want to shutdown them all
             try {
-                shutdownNow(executorService);
+                // must not remove during looping, as we clear the list afterwards
+                doShutdownNow(executorService, false);
             } catch (Throwable e) {
                 LOG.warn("Error occurred during shutdown of ExecutorService: "
                         + executorService + ". This exception will be ignored.", e);