From dc45946163d5c472147b52a36e8d325913f904e0 Mon Sep 17 00:00:00 2001 From: Andrew Ardill Date: Mon, 14 Feb 2011 15:29:52 +1100 Subject: implementation of isCurrentlyRunning(int taskId); Burrows down to the worker thread assigned to this task, and returns its alive status. If no such thread exists, then the task is not running! --- .../bukkit/craftbukkit/scheduler/CraftScheduler.java | 5 ++++- .../org/bukkit/craftbukkit/scheduler/CraftTask.java | 2 +- .../craftbukkit/scheduler/CraftThreadManager.java | 17 +++++++++++++++-- .../org/bukkit/craftbukkit/scheduler/CraftWorker.java | 4 ++++ 4 files changed, 24 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java index 46e095bc..298c9724 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java @@ -210,7 +210,7 @@ public class CraftScheduler implements BukkitScheduler, Runnable { } } } - craftThreadManager.interruptTask(plugin); + craftThreadManager.interruptTasks(plugin); } public void cancelAllTasks() { @@ -220,4 +220,7 @@ public class CraftScheduler implements BukkitScheduler, Runnable { craftThreadManager.interruptAllTasks(); } + public boolean isCurrentlyRunning(int taskId){ + return craftThreadManager.isAlive(taskId); + } } diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java index 80a1e785..7d5b610e 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java @@ -4,7 +4,7 @@ import java.lang.Comparable; import org.bukkit.plugin.Plugin; -public class CraftTask implements Comparable { +public class CraftTask implements Comparable { private final Runnable task; private final boolean syncTask; diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftThreadManager.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftThreadManager.java index 8ded4984..d63b458e 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftThreadManager.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftThreadManager.java @@ -1,7 +1,6 @@ package org.bukkit.craftbukkit.scheduler; import java.util.HashSet; -import java.util.LinkedList; import java.util.Iterator; import org.bukkit.plugin.Plugin; @@ -31,7 +30,7 @@ public class CraftThreadManager { } } - void interruptTask(Plugin owner) { + void interruptTasks(Plugin owner) { synchronized (workers) { Iterator itr = workers.iterator(); while (itr.hasNext()) { @@ -52,4 +51,18 @@ public class CraftThreadManager { } } } + + boolean isAlive(int taskId) { + synchronized (workers) { + Iterator itr = workers.iterator(); + while (itr.hasNext()) { + CraftWorker craftWorker = itr.next(); + if (craftWorker.getTaskId() == taskId) { + return craftWorker.isAlive(); + } + } + } + // didn't find it, so it must have been removed + return false; + } } diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftWorker.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftWorker.java index 2bb9400d..3bf91e4f 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftWorker.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftWorker.java @@ -53,6 +53,10 @@ public class CraftWorker implements Runnable { t.interrupt(); } + public boolean isAlive() { + return t.isAlive(); + } + private static int getNextHashId() { synchronized (hashIdCounterSync) { return hashIdCounter++; -- cgit v1.2.3