summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/bukkit
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/bukkit')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java37
1 files changed, 31 insertions, 6 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
index d2cd7ad0..02066909 100644
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
@@ -253,15 +253,40 @@ public class CraftScheduler implements BukkitScheduler, Runnable {
}
public void cancelTask(int taskId) {
- synchronized (schedulerQueue) {
- Iterator<CraftTask> itr = schedulerQueue.keySet().iterator();
- while (itr.hasNext()) {
- CraftTask current = itr.next();
- if (current.getIdNumber() == taskId) {
- itr.remove();
+ syncedTasksLock.lock();
+ try {
+ synchronized (schedulerQueue) {
+ mainThreadLock.lock();
+ try {
+ Iterator<CraftTask> itr = schedulerQueue.keySet().iterator();
+ while (itr.hasNext()) {
+ CraftTask current = itr.next();
+ if (current.getIdNumber() == taskId) {
+ itr.remove();
+ }
+ }
+ itr = mainThreadQueue.iterator();
+ while (itr.hasNext()) {
+ CraftTask current = itr.next();
+ if (current.getIdNumber() == taskId) {
+ itr.remove();
+ }
+ }
+ itr = syncedTasks.iterator();
+ while (itr.hasNext()) {
+ CraftTask current = itr.next();
+ if (current.getIdNumber() == taskId) {
+ itr.remove();
+ }
+ }
+ } finally {
+ mainThreadLock.unlock();
}
}
+ } finally {
+ syncedTasksLock.unlock();
}
+
craftThreadManager.interruptTask(taskId);
}