OpenJDK / portola / portola
changeset 11013:27f7a2f3be20
7107516: LinkedBlockingQueue/Deque.drainTo(Collection, int) returns 'maxElements' if its value is negative
Reviewed-by: chegar, mduigou, dholmes
author | dl |
---|---|
date | Thu, 10 Nov 2011 12:21:49 +0000 |
parents | 13ee761ef120 |
children | cc6fd1f079de |
files | jdk/src/share/classes/java/util/concurrent/LinkedBlockingDeque.java jdk/src/share/classes/java/util/concurrent/LinkedBlockingQueue.java |
diffstat | 2 files changed, 6 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/share/classes/java/util/concurrent/LinkedBlockingDeque.java Wed Nov 09 15:51:18 2011 +0800 +++ b/jdk/src/share/classes/java/util/concurrent/LinkedBlockingDeque.java Thu Nov 10 12:21:49 2011 +0000 @@ -742,6 +742,8 @@ throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); + if (maxElements <= 0) + return 0; final ReentrantLock lock = this.lock; lock.lock(); try {
--- a/jdk/src/share/classes/java/util/concurrent/LinkedBlockingQueue.java Wed Nov 09 15:51:18 2011 +0800 +++ b/jdk/src/share/classes/java/util/concurrent/LinkedBlockingQueue.java Thu Nov 10 12:21:49 2011 +0000 @@ -332,7 +332,7 @@ // Note: convention in all put/take/etc is to preset local var // holding count negative to indicate failure unless set. int c = -1; - Node<E> node = new Node(e); + Node<E> node = new Node<E>(e); final ReentrantLock putLock = this.putLock; final AtomicInteger count = this.count; putLock.lockInterruptibly(); @@ -412,7 +412,7 @@ if (count.get() == capacity) return false; int c = -1; - Node<E> node = new Node(e); + Node<E> node = new Node<E>(e); final ReentrantLock putLock = this.putLock; putLock.lock(); try { @@ -728,6 +728,8 @@ throw new NullPointerException(); if (c == this) throw new IllegalArgumentException(); + if (maxElements <= 0) + return 0; boolean signalNotFull = false; final ReentrantLock takeLock = this.takeLock; takeLock.lock();