From 4a932c11dea3444c582f6de3e714d1a644eb7760 Mon Sep 17 00:00:00 2001 From: Afforess Date: Wed, 13 Jul 2011 17:26:33 -0700 Subject: [PATCH] Do not immediately re-queue repeating tasks, or they may simply keep repeating on this tick, until the 35ms time limit runs out. --- .../org/bukkit/craftbukkit/scheduler/CraftScheduler.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java index 020669097c..815b238d6c 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java @@ -49,6 +49,7 @@ public class CraftScheduler implements BukkitScheduler, Runnable { long firstTick = -1; long currentTick = -1; CraftTask first = null; + TreeMap nextQueue = new TreeMap(); do { synchronized (schedulerQueue) { first = null; @@ -64,7 +65,7 @@ public class CraftScheduler implements BukkitScheduler, Runnable { processTask(first); if (first.getPeriod() >= 0) { first.updateExecution(); - schedulerQueue.put(first, first.isSync()); + nextQueue.put(first, first.isSync()); } } else { stop = true; @@ -78,6 +79,10 @@ public class CraftScheduler implements BukkitScheduler, Runnable { } } while (!stop); + synchronized (schedulerQueue) { + schedulerQueue.putAll(nextQueue); + } + long sleepTime = 0; if (first == null) { sleepTime = 60000L;