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:
Ursprung
717fbbeffa
Commit
ed6aab8200
@ -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;
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren