From fbe3046435815a1423bf4a287ad9ec914c91bb55 Mon Sep 17 00:00:00 2001 From: blablubbabc Date: Sun, 17 Jun 2018 15:04:25 +0200 Subject: SPIGOT-3619: Improve CraftScheduler#isCurrentlyRunning * No longer returns opposite of what it should * Works for sync tasks as well --- .../org/bukkit/craftbukkit/scheduler/CraftScheduler.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java index 96eff377..7b4dab91 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java @@ -74,6 +74,10 @@ public class CraftScheduler implements BukkitScheduler { * These are tasks that are currently active. It's provided for 'viewing' the current state. */ private final ConcurrentHashMap runners = new ConcurrentHashMap(); + /** + * The sync task that is currently running on the main thread. + */ + private volatile CraftTask currentTask = null; private volatile int currentTick = -1; private final Executor executor = Executors.newCachedThreadPool(); private CraftAsyncDebugger debugHead = new CraftAsyncDebugger(-1, null, null) {@Override StringBuilder debugTo(StringBuilder string) {return string;}}; @@ -269,12 +273,15 @@ public class CraftScheduler implements BukkitScheduler { public boolean isCurrentlyRunning(final int taskId) { final CraftTask task = runners.get(taskId); - if (task == null || task.isSync()) { + if (task == null) { return false; } + if (task.isSync()) { + return (task == currentTask); + } final CraftAsyncTask asyncTask = (CraftAsyncTask) task; synchronized (asyncTask.getWorkers()) { - return asyncTask.getWorkers().isEmpty(); + return !asyncTask.getWorkers().isEmpty(); } } @@ -348,6 +355,7 @@ public class CraftScheduler implements BukkitScheduler { continue; } if (task.isSync()) { + currentTask = task; try { task.run(); } catch (final Throwable throwable) { @@ -358,6 +366,8 @@ public class CraftScheduler implements BukkitScheduler { task.getTaskId(), task.getOwner().getDescription().getFullName()), throwable); + } finally { + currentTask = null; } parsePending(); } else { -- cgit v1.2.3