diff options
author | Neil Fuller <nfuller@google.com> | 2015-09-23 17:01:32 +0100 |
---|---|---|
committer | Neil Fuller <nfuller@google.com> | 2015-09-30 20:08:40 +0000 |
commit | dd303ca9af64bda1a503d9918ec17a61e9b06e6d (patch) | |
tree | bdd1e13bb374da50909aa9cc4bf1a2ad073ba2db | |
parent | ab29ea8cfe87ea2bf95cbcf0185d4b83e065863e (diff) | |
download | libcore-dd303ca9af64bda1a503d9918ec17a61e9b06e6d.zip libcore-dd303ca9af64bda1a503d9918ec17a61e9b06e6d.tar.gz libcore-dd303ca9af64bda1a503d9918ec17a61e9b06e6d.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.java | 5 | ||||
-rw-r--r-- | luni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java | 5 |
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 } /** |