@@ -33,14 +33,17 @@ class CraftAsyncTask extends CraftTask {
|
||||
}
|
||||
workers.add(
|
||||
new BukkitWorker() {
|
||||
@Override
|
||||
public Thread getThread() {
|
||||
return thread;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTaskId() {
|
||||
return CraftAsyncTask.this.getTaskId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Plugin getOwner() {
|
||||
return CraftAsyncTask.this.getOwner();
|
||||
}
|
||||
@@ -95,6 +98,7 @@ class CraftAsyncTask extends CraftTask {
|
||||
return workers;
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean cancel0() {
|
||||
synchronized (workers) {
|
||||
// Synchronizing here prevents race condition for a completing task
|
||||
|
||||
@@ -19,6 +19,7 @@ class CraftFuture<T> extends CraftTask implements Future<T> {
|
||||
this.callable = callable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean cancel(final boolean mayInterruptIfRunning) {
|
||||
if (getPeriod() != CraftTask.NO_REPEATING) {
|
||||
return false;
|
||||
@@ -27,11 +28,13 @@ class CraftFuture<T> extends CraftTask implements Future<T> {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDone() {
|
||||
final long period = this.getPeriod();
|
||||
return period != CraftTask.NO_REPEATING && period != CraftTask.PROCESS_FOR_FUTURE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public T get() throws CancellationException, InterruptedException, ExecutionException {
|
||||
try {
|
||||
return get(0, TimeUnit.MILLISECONDS);
|
||||
@@ -40,6 +43,7 @@ class CraftFuture<T> extends CraftTask implements Future<T> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized T get(long timeout, final TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
|
||||
timeout = unit.toMillis(timeout);
|
||||
long period = this.getPeriod();
|
||||
@@ -92,6 +96,7 @@ class CraftFuture<T> extends CraftTask implements Future<T> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
synchronized boolean cancel0() {
|
||||
if (getPeriod() != CraftTask.NO_REPEATING) {
|
||||
return false;
|
||||
|
||||
@@ -60,6 +60,7 @@ public class CraftScheduler implements BukkitScheduler {
|
||||
*/
|
||||
private final PriorityQueue<CraftTask> pending = new PriorityQueue<CraftTask>(10,
|
||||
new Comparator<CraftTask>() {
|
||||
@Override
|
||||
public int compare(final CraftTask o1, final CraftTask o2) {
|
||||
int value = Long.compare(o1.getNextRun(), o2.getNextRun());
|
||||
|
||||
@@ -227,6 +228,7 @@ public class CraftScheduler implements BukkitScheduler {
|
||||
}
|
||||
task = new CraftTask(
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!check(CraftScheduler.this.temp)) {
|
||||
check(CraftScheduler.this.pending);
|
||||
@@ -263,6 +265,7 @@ public class CraftScheduler implements BukkitScheduler {
|
||||
Validate.notNull(plugin, "Cannot cancel tasks of null plugin");
|
||||
final CraftTask task = new CraftTask(
|
||||
new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
check(CraftScheduler.this.pending);
|
||||
check(CraftScheduler.this.temp);
|
||||
|
||||
Reference in New Issue
Block a user