diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeSchedulerAdapter.java b/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeSchedulerAdapter.java index 86a4747e1..7b4074627 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeSchedulerAdapter.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeSchedulerAdapter.java @@ -73,8 +73,12 @@ public class BungeeSchedulerAdapter implements SchedulerAdapter { } @Override - public void shutdown() { + public void shutdownScheduler() { Iterators.tryIterate(this.tasks, ScheduledTask::cancel); } + @Override + public void shutdownExecutor() { + // do nothing + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/plugin/AbstractLuckPermsPlugin.java b/common/src/main/java/me/lucko/luckperms/common/plugin/AbstractLuckPermsPlugin.java index 4daa943e9..dde6709d4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/plugin/AbstractLuckPermsPlugin.java +++ b/common/src/main/java/me/lucko/luckperms/common/plugin/AbstractLuckPermsPlugin.java @@ -205,6 +205,11 @@ public abstract class AbstractLuckPermsPlugin implements LuckPermsPlugin { } public final void disable() { + getLogger().info("Starting shutdown process..."); + + // cancel delayed/repeating tasks + getBootstrap().getScheduler().shutdownScheduler(); + // shutdown permission vault and verbose handler tasks this.permissionRegistry.close(); this.verboseHandler.close(); @@ -233,9 +238,8 @@ public abstract class AbstractLuckPermsPlugin implements LuckPermsPlugin { // unregister api ApiRegistrationUtil.unregisterProvider(); - // shutdown scheduler - getLogger().info("Shutting down internal scheduler..."); - getBootstrap().getScheduler().shutdown(); + // shutdown async executor pool + getBootstrap().getScheduler().shutdownExecutor(); getLogger().info("Goodbye!"); } diff --git a/common/src/main/java/me/lucko/luckperms/common/plugin/scheduler/AbstractJavaScheduler.java b/common/src/main/java/me/lucko/luckperms/common/plugin/scheduler/AbstractJavaScheduler.java index e523e7208..767a80e6e 100644 --- a/common/src/main/java/me/lucko/luckperms/common/plugin/scheduler/AbstractJavaScheduler.java +++ b/common/src/main/java/me/lucko/luckperms/common/plugin/scheduler/AbstractJavaScheduler.java @@ -73,8 +73,17 @@ public abstract class AbstractJavaScheduler implements SchedulerAdapter { } @Override - public void shutdown() { + public void shutdownScheduler() { this.scheduler.shutdown(); + try { + this.scheduler.awaitTermination(1, TimeUnit.MINUTES); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + @Override + public void shutdownExecutor() { this.schedulerWorkerPool.delegate.shutdown(); try { this.schedulerWorkerPool.delegate.awaitTermination(1, TimeUnit.MINUTES); diff --git a/common/src/main/java/me/lucko/luckperms/common/plugin/scheduler/SchedulerAdapter.java b/common/src/main/java/me/lucko/luckperms/common/plugin/scheduler/SchedulerAdapter.java index 93e02038e..1be23bfbc 100644 --- a/common/src/main/java/me/lucko/luckperms/common/plugin/scheduler/SchedulerAdapter.java +++ b/common/src/main/java/me/lucko/luckperms/common/plugin/scheduler/SchedulerAdapter.java @@ -86,8 +86,17 @@ public interface SchedulerAdapter { SchedulerTask asyncRepeating(Runnable task, long interval, TimeUnit unit); /** - * Shuts down this executor instance + * Shuts down the scheduler instance. + * + *

{@link #asyncLater(Runnable, long, TimeUnit)} and {@link #asyncRepeating(Runnable, long, TimeUnit)}.

*/ - void shutdown(); + void shutdownScheduler(); + + /** + * Shuts down the executor instance. + * + *

{@link #async()} and {@link #executeAsync(Runnable)}.

+ */ + void shutdownExecutor(); } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeSchedulerAdapter.java b/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeSchedulerAdapter.java index 1d9e07b84..4d5e5e318 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeSchedulerAdapter.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeSchedulerAdapter.java @@ -101,8 +101,12 @@ public class SpongeSchedulerAdapter implements SchedulerAdapter { } @Override - public void shutdown() { + public void shutdownScheduler() { Iterators.tryIterate(this.tasks, Task::cancel); } + @Override + public void shutdownExecutor() { + // do nothing + } } diff --git a/velocity/src/main/java/me/lucko/luckperms/velocity/VelocitySchedulerAdapter.java b/velocity/src/main/java/me/lucko/luckperms/velocity/VelocitySchedulerAdapter.java index 66022e342..33e458240 100644 --- a/velocity/src/main/java/me/lucko/luckperms/velocity/VelocitySchedulerAdapter.java +++ b/velocity/src/main/java/me/lucko/luckperms/velocity/VelocitySchedulerAdapter.java @@ -80,8 +80,12 @@ public class VelocitySchedulerAdapter implements SchedulerAdapter { } @Override - public void shutdown() { + public void shutdownScheduler() { Iterators.tryIterate(this.tasks, ScheduledTask::cancel); } + @Override + public void shutdownExecutor() { + // do nothing + } }