summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Fuller <nfuller@google.com>2015-09-23 17:01:32 +0100
committerNeil Fuller <nfuller@google.com>2015-10-09 09:20:08 +0000
commit6de5831683acc64e2ca5efa61fae6834314d0eb2 (patch)
treebdd1e13bb374da50909aa9cc4bf1a2ad073ba2db
parent23dedc042c3a6e57a1bc36a83f75e9098c399d2e (diff)
downloadlibcore-6de5831683acc64e2ca5efa61fae6834314d0eb2.zip
libcore-6de5831683acc64e2ca5efa61fae6834314d0eb2.tar.gz
libcore-6de5831683acc64e2ca5efa61fae6834314d0eb2.tar.bz2
Patch for awaitNanos() for coarse-grained clocks
If System.nanoTime() returns the same value twice in awaitNanos() then (remaining == initialNanos) will be true but the code will conclude that a (less likely) overflow occurred. Bug: 24284239 (cherry-picked from commit 8fc2ac0fa8eb47ce607f8412e469d4f680b6ef85) Change-Id: I3b9d573ea822e18f4c1849c8ab66071e66274a50
-rw-r--r--luni/src/main/java/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java5
-rw-r--r--luni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java5
2 files changed, 8 insertions, 2 deletions
diff --git a/luni/src/main/java/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java b/luni/src/main/java/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java
index 47a02a9..a74fb24 100644
--- a/luni/src/main/java/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java
+++ b/luni/src/main/java/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java
@@ -1838,7 +1838,10 @@ public abstract class AbstractQueuedLongSynchronizer
if (interruptMode != 0)
reportInterruptAfterWait(interruptMode);
long remaining = deadline - System.nanoTime(); // avoid overflow
- return (remaining < initialNanos) ? remaining : Long.MIN_VALUE;
+ // BEGIN android-note Changed from < to <= http://b/24284239
+ // return (remaining < initialNanos) ? remaining : Long.MIN_VALUE;
+ return (remaining <= initialNanos) ? remaining : Long.MIN_VALUE;
+ // END android-note
}
/**
diff --git a/luni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java b/luni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java
index bfe88e5..8823b6f 100644
--- a/luni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java
+++ b/luni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java
@@ -2062,7 +2062,10 @@ public abstract class AbstractQueuedSynchronizer
if (interruptMode != 0)
reportInterruptAfterWait(interruptMode);
long remaining = deadline - System.nanoTime(); // avoid overflow
- return (remaining < initialNanos) ? remaining : Long.MIN_VALUE;
+ // BEGIN android-note Changed from < to <= http://b/24284239
+ // return (remaining < initialNanos) ? remaining : Long.MIN_VALUE;
+ return (remaining <= initialNanos) ? remaining : Long.MIN_VALUE;
+ // END android-note
}
/**