Remove runner leak on async tasks. Fixes BUKKIT-3288

In some situations, an async task could be cancelled with no tasks
pending. This means the finally {} block from run() never gets executed
properly on the last async task to have run, as it expected to be
executed again.

This fix takes the only spot that the task period is set to cancelled
and will check to see if the task should be purged from the runners
list.
Dieser Commit ist enthalten in:
Wesley Wolfe 2012-12-23 05:13:33 -06:00
Ursprung 717fbbeffa
Commit ed6aab8200

Datei anzeigen

@ -100,6 +100,9 @@ class CraftAsyncTask extends CraftTask {
synchronized (workers) { synchronized (workers) {
// Synchronizing here prevents race condition for a completing task // Synchronizing here prevents race condition for a completing task
setPeriod(-2l); setPeriod(-2l);
if (workers.isEmpty()) {
runners.remove(getTaskId());
}
} }
return true; return true;
} }