Do not immediately re-queue repeating tasks, or they may simply keep repeating on this tick, until the 35ms time limit runs out.

Dieser Commit ist enthalten in:
Afforess 2011-07-13 17:26:33 -07:00 committet von EvilSeph
Ursprung 958acee5af
Commit 4a932c11de

Datei anzeigen

@ -49,6 +49,7 @@ public class CraftScheduler implements BukkitScheduler, Runnable {
long firstTick = -1; long firstTick = -1;
long currentTick = -1; long currentTick = -1;
CraftTask first = null; CraftTask first = null;
TreeMap<CraftTask, Boolean> nextQueue = new TreeMap<CraftTask, Boolean>();
do { do {
synchronized (schedulerQueue) { synchronized (schedulerQueue) {
first = null; first = null;
@ -64,7 +65,7 @@ public class CraftScheduler implements BukkitScheduler, Runnable {
processTask(first); processTask(first);
if (first.getPeriod() >= 0) { if (first.getPeriod() >= 0) {
first.updateExecution(); first.updateExecution();
schedulerQueue.put(first, first.isSync()); nextQueue.put(first, first.isSync());
} }
} else { } else {
stop = true; stop = true;
@ -78,6 +79,10 @@ public class CraftScheduler implements BukkitScheduler, Runnable {
} }
} while (!stop); } while (!stop);
synchronized (schedulerQueue) {
schedulerQueue.putAll(nextQueue);
}
long sleepTime = 0; long sleepTime = 0;
if (first == null) { if (first == null) {
sleepTime = 60000L; sleepTime = 60000L;