summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/bukkit/craftbukkit/scheduler/CraftFuture.java7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftFuture.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftFuture.java
index de96ec9b..fee49c92 100644
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftFuture.java
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftFuture.java
@@ -48,14 +48,19 @@ class CraftFuture<T> extends CraftTask implements Future<T> {
public synchronized T get(long timeout, final TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
timeout = unit.toMillis(timeout);
long period = this.getPeriod();
+ long timestamp = timeout > 0 ? System.currentTimeMillis() : 0l;
while (true) {
if (period == -1l || period == -3l) {
- this.wait(unit.toMillis(timeout));
+ this.wait(timeout);
period = this.getPeriod();
if (period == -1l || period == -3l) {
if (timeout == 0l) {
continue;
}
+ timeout += timestamp - (timestamp = System.currentTimeMillis());
+ if (timeout > 0) {
+ continue;
+ }
throw new TimeoutException();
}
}