Fixed thread pools incorrect shutdown.

(cherry picked from commit 66cef22)


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/b1736c0b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/b1736c0b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/b1736c0b

Branch: refs/heads/ignite-5232-1.7.2
Commit: b1736c0bd87d6cfb65f9ef422241e0f1aba04c8d
Parents: 442aac2
Author: Andrey V. Mashenkov <[email protected]>
Authored: Wed May 24 18:48:52 2017 +0300
Committer: Andrey V. Mashenkov <[email protected]>
Committed: Wed May 24 18:48:52 2017 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheAdapter.java      | 12 +++---
 .../ignite/internal/util/IgniteUtils.java       | 45 +++++++++++---------
 2 files changed, 30 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b1736c0b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
index 11bf34b..189f602 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
@@ -1132,14 +1132,14 @@ public abstract class GridCacheAdapter<K, V> implements 
IgniteInternalCache<K, V
         if (!F.isEmpty(jobs)) {
             ExecutorService execSvc = null;
 
-            if (jobs.size() > 1) {
-                execSvc = Executors.newFixedThreadPool(jobs.size() - 1);
+            try {
+                if (jobs.size() > 1) {
+                    execSvc = Executors.newFixedThreadPool(jobs.size() - 1);
 
-                for (int i = 1; i < jobs.size(); i++)
-                    execSvc.submit(jobs.get(i));
-            }
+                    for (int i = 1; i < jobs.size(); i++)
+                        execSvc.submit(jobs.get(i));
+                }
 
-            try {
                 jobs.get(0).run();
             }
             finally {

http://git-wip-us.apache.org/repos/asf/ignite/blob/b1736c0b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java 
b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index ca29adf..c2efb95 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -1833,33 +1833,36 @@ public abstract class IgniteUtils {
 
         ExecutorService executor = Executors.newFixedThreadPool(Math.min(10, 
addrs.size()));
 
-        for (final InetAddress addr : addrs) {
-            futs.add(executor.submit(new Runnable() {
-                @Override public void run() {
-                    if (reachable(addr, reachTimeout)) {
-                        synchronized (res) {
-                            res.add(addr);
+        try {
+            for (final InetAddress addr : addrs) {
+                futs.add(executor.submit(new Runnable() {
+                    @Override public void run() {
+                        if (reachable(addr, reachTimeout)) {
+                            synchronized (res) {
+                                res.add(addr);
+                            }
                         }
                     }
-                }
-            }));
-        }
-
-        for (Future<?> fut : futs) {
-            try {
-                fut.get();
+                }));
             }
-            catch (InterruptedException e) {
-                Thread.currentThread().interrupt();
 
-                throw new IgniteException("Thread has been interrupted.", e);
-            }
-            catch (ExecutionException e) {
-                throw new IgniteException(e);
+            for (Future<?> fut : futs) {
+                try {
+                    fut.get();
+                }
+                catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+
+                    throw new IgniteException("Thread has been interrupted.", 
e);
+                }
+                catch (ExecutionException e) {
+                    throw new IgniteException(e);
+                }
             }
         }
-
-        executor.shutdown();
+        finally {
+            executor.shutdown();
+        }
 
         return res;
     }

Reply via email to