Repository: tomee Updated Branches: refs/heads/master f9959484a -> 4cf313cf4
ensure to remove the task with cancel call Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/ac0c779d Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/ac0c779d Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/ac0c779d Branch: refs/heads/master Commit: ac0c779d1cacd16b7ec43cd83a20b16013407019 Parents: f995948 Author: Romain Manni-Bucau <[email protected]> Authored: Wed Jun 17 01:57:22 2015 +0200 Committer: Romain Manni-Bucau <[email protected]> Committed: Wed Jun 17 01:57:22 2015 +0200 ---------------------------------------------------------------------- .../openejb/core/stateless/StatelessInstanceManager.java | 4 ++++ .../src/main/java/org/apache/openejb/util/Pool.java | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/ac0c779d/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java b/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java index 82cb094..aa6617c 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java @@ -65,6 +65,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -100,6 +101,9 @@ public class StatelessInstanceManager { this.closeTimeout = closeTimeout; this.poolBuilder = poolBuilder; this.scheduledExecutor = ses; + if (ScheduledThreadPoolExecutor.class.isInstance(ses)) { + ScheduledThreadPoolExecutor.class.cast(ses).setRemoveOnCancelPolicy(true); + } if (accessTimeout.getUnit() == null) { accessTimeout.setUnit(TimeUnit.MILLISECONDS); http://git-wip-us.apache.org/repos/asf/tomee/blob/ac0c779d/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java b/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java index 73f5bbc..cdb966f 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java @@ -140,7 +140,11 @@ public class Pool<T> { createdSES = false; } } - if (this.future.compareAndSet(null, scheduledExecutorService.scheduleAtFixedRate(sweeper, 0, this.sweepInterval, MILLISECONDS)) && !createdSES) { + final ScheduledFuture<?> scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(sweeper, 0, this.sweepInterval, MILLISECONDS); + if (!this.future.compareAndSet(null, scheduledFuture)) { + scheduledFuture.cancel(true); + } + if (!createdSES) { // we don't want to shutdown it, we'll just stop the task this.scheduler.set(null); }
