Calling cancel on a Future returned by a TaskScheduler works reliably now

Issue: SPR-9821
This commit is contained in:
Juergen Hoeller 2012-09-25 13:53:07 +02:00
parent 7fc16298e6
commit 0d88c73523
1 changed files with 9 additions and 3 deletions

View File

@ -108,21 +108,27 @@ class ReschedulingRunnable extends DelegatingErrorHandlingRunnable implements Sc
} }
public Object get() throws InterruptedException, ExecutionException { public Object get() throws InterruptedException, ExecutionException {
ScheduledFuture curr;
synchronized (this.triggerContextMonitor) { synchronized (this.triggerContextMonitor) {
return this.currentFuture.get(); curr = this.currentFuture;
} }
return curr.get();
} }
public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
ScheduledFuture curr;
synchronized (this.triggerContextMonitor) { synchronized (this.triggerContextMonitor) {
return this.currentFuture.get(timeout, unit); curr = this.currentFuture;
} }
return curr.get(timeout, unit);
} }
public long getDelay(TimeUnit unit) { public long getDelay(TimeUnit unit) {
ScheduledFuture curr;
synchronized (this.triggerContextMonitor) { synchronized (this.triggerContextMonitor) {
return this.currentFuture.getDelay(unit); curr = this.currentFuture;
} }
return curr.getDelay(unit);
} }
public int compareTo(Delayed other) { public int compareTo(Delayed other) {