From 31b41f8d4b0d0534a883a71491ad39f326ebff36 Mon Sep 17 00:00:00 2001 From: David Karnok Date: Tue, 27 Jun 2017 15:11:50 +0200 Subject: [PATCH] 2.x: fix periodic scheduler purging config not honored (#5441) --- .../schedulers/SchedulerPoolFactory.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/reactivex/internal/schedulers/SchedulerPoolFactory.java b/src/main/java/io/reactivex/internal/schedulers/SchedulerPoolFactory.java index 54e8a537cf..7aa5bb6a19 100644 --- a/src/main/java/io/reactivex/internal/schedulers/SchedulerPoolFactory.java +++ b/src/main/java/io/reactivex/internal/schedulers/SchedulerPoolFactory.java @@ -57,6 +57,9 @@ private SchedulerPoolFactory() { * Starts the purge thread if not already started. */ public static void start() { + if (!PURGE_ENABLED) { + return; + } for (;;) { ScheduledExecutorService curr = PURGE_THREAD.get(); if (curr != null && !curr.isShutdown()) { @@ -78,7 +81,10 @@ public static void start() { * Stops the purge thread. */ public static void shutdown() { - PURGE_THREAD.get().shutdownNow(); + ScheduledExecutorService exec = PURGE_THREAD.get(); + if (exec != null) { + exec.shutdownNow(); + } POOLS.clear(); } @@ -90,10 +96,10 @@ public static void shutdown() { if (properties.containsKey(PURGE_ENABLED_KEY)) { purgeEnable = Boolean.getBoolean(PURGE_ENABLED_KEY); + } - if (purgeEnable && properties.containsKey(PURGE_PERIOD_SECONDS_KEY)) { - purgePeriod = Integer.getInteger(PURGE_PERIOD_SECONDS_KEY, purgePeriod); - } + if (purgeEnable && properties.containsKey(PURGE_PERIOD_SECONDS_KEY)) { + purgePeriod = Integer.getInteger(PURGE_PERIOD_SECONDS_KEY, purgePeriod); } PURGE_ENABLED = purgeEnable; @@ -109,7 +115,7 @@ public static void shutdown() { */ public static ScheduledExecutorService create(ThreadFactory factory) { final ScheduledExecutorService exec = Executors.newScheduledThreadPool(1, factory); - if (exec instanceof ScheduledThreadPoolExecutor) { + if (PURGE_ENABLED && exec instanceof ScheduledThreadPoolExecutor) { ScheduledThreadPoolExecutor e = (ScheduledThreadPoolExecutor) exec; POOLS.put(e, exec); }