summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorblablubbabc <lukas@wirsindwir.de>2018-06-17 15:04:25 +0200
committermd_5 <git@md-5.net>2018-06-20 13:11:50 +1000
commitfbe3046435815a1423bf4a287ad9ec914c91bb55 (patch)
treef5a019a0ac7f6a26f1b332a60722f1da884a6770
parent2f3ed3b2d01adc01e15a5cf83929ae2a40ddccf2 (diff)
downloadcraftbukkit-fbe3046435815a1423bf4a287ad9ec914c91bb55.tar
craftbukkit-fbe3046435815a1423bf4a287ad9ec914c91bb55.tar.gz
craftbukkit-fbe3046435815a1423bf4a287ad9ec914c91bb55.tar.lz
craftbukkit-fbe3046435815a1423bf4a287ad9ec914c91bb55.tar.xz
craftbukkit-fbe3046435815a1423bf4a287ad9ec914c91bb55.zip
SPIGOT-3619: Improve CraftScheduler#isCurrentlyRunning
* No longer returns opposite of what it should * Works for sync tasks as well
-rw-r--r--src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java14
1 files changed, 12 insertions, 2 deletions
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<Integer, CraftTask> runners = new ConcurrentHashMap<Integer, CraftTask>();
+ /**
+ * 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 {